java几个简单问题!

1。以下代码都省略了开头
double a = 3.1251111111;
double b = 1.0417037037;
System.out.println((a/3)==b);
System.out.println((b*3)==a);
怎么这两个数相等都是输出false?
2
int a=0123;
int b=123;
System.out.println(a);
System.out.println(b);
输出a=83?为什么是83呢?
3
int b = 3;
int s = 4;
s = s+++b;
System.out.println(s);
为什么上面的b无论是++b还是b++都是输出7?
4
byte b = 3;
short s = 4;
s = s+b++;
System.out.println(s);
输出可能损失精度?

一楼不懂请不要乱教人家
1.JAVA里double 的这种除法运算是有可能损失精度的。比如有时0.1可能会输出成0.09999999...
解决这种问题的办法是double a = 3.1251111111;b=a/3;这样就能相等了
2.int a=0123;JAVA里以0开头赋值的话他会当成是八进制,0x开头是16进制,所以123转换成8进制为83.
3. s+++b;由于++的优先级高于+,所以实际上是这样运算的。(s++)+b.由于是后++所以是先运算赋值,再自加,所以运算顺序 是这样的,s+b=7,s=7,然后右边的3再++,(虽然没有意义)。
所以输出的是7
4.byte和short相加默认会转换成int,所以会报出语法错误不能把int转换成short,解决办法:
s = (short) (s+b++);
有不懂可以HI我
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-20
1.double有它自己的精度,当你赋值给它时,可能并没有达到它的精度,但是如果是它自己运算出来的就使用默认的精度,a/3=1.0417037036999999明显和b不等,同理b*3=3.1251111111000003
2.说明:由于你在123前面有0,所有jvm会认为此为8进制,16进制是0x,所有它会:3+2*8+1*8^2=83
3.++运算符的优先级大于+,所以+++的意思是(s++)+b,结果自然是7,如果是s+b++,结果也自然是7,这种题目没意思,加个括号就可以解决
4.b++,相当于b+1,所有其结果会自动提升为int类型,再将其与s运算,结果也是int型,所以赋值给short s的时候,自然会损失精度。

参考资料:自己脑袋

第2个回答  2011-08-20
1) (a/3)=1.0417037036999999;(b*3)=3.1251111111000003所以a与b都为flash;
2) 0123是八进制的表示,换算为10进制是83;
3) b++ 是后自增,先使用b的值,再b+1;++b为前自增,先b+1再使用b的新值;
4) 损失精度
第3个回答  2011-08-20
1.你的System.out.println有问题,应为
System.out.println(“a/3{0}=={b}”,a/b,b);
第二个println也是这样
2.int a=0123;这个赋值是错误的,0123不是一个整数,你的输出能够等于83,已经很给力了。
3.s = s+++b;这里不能写作++b,或b++,程序还是把它看成s=s+b
正确的是
int b = 3;
int s = 4;
b++;
s = s+b; 或s+=b;
System.out.println(s);
4.s = s+b++;错误和第三题一样,语法规则不允许你这样写
第4个回答  2011-08-22
1.在进行计算时,计算机内部使用的精度是有限的。
2.因为0123表示的是八进制数,所以转换成十进制的话是83
3.s+++b因为++的优先级高于+,所以先算++,如果是++b,表达式就是s+++b,就是先算++,(s++)+b;先s使用,再自加,如果是b++,表达式就是s+b++,先算b++,s+(b++),b++先使用b的值,再自加
4.s是什么类型的。默认是int型。由小的转为大的,不会损失精度。

java面试问题,希望过来人解答
1、请你自我介绍一下你自己?回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和...

java实在学不明白,几个java问题请教大家
而第二个方法是一个String字符串数组 仅仅只有这个不同 这样的两个或者多个方法 不能并不称之为多个方法 我们称之为一个方法的重载 也就是说这两个方法是 sayHello方法的重载 那么也就是说sayHello方法是重载方法 方法的重载次数不限 3、java里的类与对象到底是什么关系的? 答:类就是一个大概...

关于java的几个小问题1.电脑只能解析机器语言(0与1),那汇编语言怎么解析...
问题1:CPU是只明白0和1的,一段010101的代码可能是 数据 ,也可能是 操作 。这要看是从数据线传输的还是控制线传输的。汇编语言的每个符号都对应了一个操作。只不过人看上去是字母,机器看上去是010101.问题2:面向对象和面向过程是指高级语言。机器语言(只有0和1)---》汇编语言---》高级语言(...

java面试题有哪些常见的啊
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见 http: \/\/www.frontfree.net\/articles\/services\/view.asp?id=704&page=1 注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一...

java面试中经常被问到的问题有哪些?
java面试中经常被问到的问题有如下:1、进程,线程,协程之间的区别是什么?简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是进程的一个实体,是cpu调度...

java基础面试题有哪些?
Java 语言支持的 8 中基本数据类型是:byte short int long float double boolean char 自动装箱是 Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把 int 转化成 Integer,double 转化成 double,等等...

java面试题和答案?
Java编程常见面试题目,要求正确答案?答案:float是单精度浮点数,内存中占用4字节double是双精度浮点数,内存中占用8字节。Q9:Java中的Final关键字是什么意思?请举例说明。java面试中经常被问到的问题有如下:进程,线程,协程之间的区别是什么?简而言之,进程是程序运行和资源分配的基本单位,一个程序...

请教几个关于JAVA的问题,请哥哥姐姐不吝赐教,小弟感激不尽
{ public static void main (String args[]){ int a = 4, b = 6, c = 8;String s = "abc";System.out.println (a + b + s + c);} } 这样的话答案就是D,a和b先加起来,因为中间隔了个字符,所以没有加后面的c. 所以是10abc8.第二题答案是C s1和s2是一样的,但字符型不...

JAVA初学者的几个问题...本人初学,不要用太深的理论回答,稍微带点自己...
3、final修饰的变量有个特殊的属性:赋值过后就不能更改值了,因此在JAVA里被称作常量。比如圆面积s=r^2*π.π是一个恒定不变的值,这个时候就可以用final double X=3.14;来创建。4、整形直接比较值是否相等。引用类型变量==比较的是2边的变量内存地址是否相等,也就是是否指向同一对象。equals方法...

java简单问题,答案都书本都给出来了,可是都没懂,求助高手解释一下哈!先...
13 数组必须这样定义,可以定义a[1][],a[][],a[1][1],但是不可以定义a[][1]因为产生数据的时候,会发现二维数组无法找到固定的一维数组作为支撑。至于B数组可以这样写 26 在生成类的对象的时候,首先初始化的是静态变量和方法,所以x=10,然后+5,等于15,最后除以3,最后得出5 29 Ex42 test...

相似回答