当前位置: 技术问答>java相关
scjp的问题
来源: 互联网 发布时间:2015-05-12
本文导语: ,p54 no.5 为什么int x=100,float y=100.0F; if(x==y){System.out.println("Equal");}会得到"equal"的答案? 为什么String x=new String("100"),String y=new String("100");if(x==y){System.out.println("Equal");}没有输出结果而 String x="100";String y="100";却得...
,p54 no.5
为什么int x=100,float y=100.0F; if(x==y){System.out.println("Equal");}会得到"equal"的答案?
为什么String x=new String("100"),String y=new String("100");if(x==y){System.out.println("Equal");}没有输出结果而
String x="100";String y="100";却得到"Equal"的答案呢?
不是说==号比较引用时是比较他们的地址吗?
50分奉送!!
为什么int x=100,float y=100.0F; if(x==y){System.out.println("Equal");}会得到"equal"的答案?
为什么String x=new String("100"),String y=new String("100");if(x==y){System.out.println("Equal");}没有输出结果而
String x="100";String y="100";却得到"Equal"的答案呢?
不是说==号比较引用时是比较他们的地址吗?
50分奉送!!
|
1. int x=100,float y=100.0F; if(x==y){System.out.println("Equal");}
x == y : x转化为浮点数,相当于 x=100.0F, 同一个转换虚拟机,当然得到一个大小的100.0F, 所以x等于y
2. String x=new String("100"),String y=new String("100");if(x==y){System.out.println("Equal");}
这个很显然,x和y引用的是两块不一样地址的对象,其实和这样的比较没有区别:String x=new String("101"),String y=new String("100");if(x==y){System.out.println("Equal");}
他们俩怎么也不会相等,而x==y比的是他们俩的引用值(理解成指针值算了)
3. String x="100";String y="100";
string"100"是编译成javacode时候已经定下来的一个常量,我想java的compiler肯定会优化从而把两个const string"100"合并在一块固定区域,假设为aaa,那么String x="100"=aaa, x只是aaa的一个引用,y也是一样,所以多半这时候true=(x==y)
4. 想说点什么,比如这边不是java版...
x == y : x转化为浮点数,相当于 x=100.0F, 同一个转换虚拟机,当然得到一个大小的100.0F, 所以x等于y
2. String x=new String("100"),String y=new String("100");if(x==y){System.out.println("Equal");}
这个很显然,x和y引用的是两块不一样地址的对象,其实和这样的比较没有区别:String x=new String("101"),String y=new String("100");if(x==y){System.out.println("Equal");}
他们俩怎么也不会相等,而x==y比的是他们俩的引用值(理解成指针值算了)
3. String x="100";String y="100";
string"100"是编译成javacode时候已经定下来的一个常量,我想java的compiler肯定会优化从而把两个const string"100"合并在一块固定区域,假设为aaa,那么String x="100"=aaa, x只是aaa的一个引用,y也是一样,所以多半这时候true=(x==y)
4. 想说点什么,比如这边不是java版...
|
同意楼上
在《Java认证考试学习指南》P566已经说的很明白了。
在《Java认证考试学习指南》P566已经说的很明白了。
|
同意