论坛首页 招聘求职论坛

一道邪恶的java基础题

浏览 45508 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (5)
作者 正文
   发表时间:2010-09-30  
这就是脑残...
中国软件为什么总上不去.....
难道细心代表一个项目的成败?
0 请登录后投票
   发表时间:2010-09-30  
试了一下,如果没有前面的“***”+的话确实是true,但是加了以后就是false。这应该说明String是能用==直接比较的。也说明了运算符的优先级。
0 请登录后投票
   发表时间:2010-10-01  
A:
String str1 = "java";
String str2 = "java";
System.out.print(str1==str2);
输出:true;
关键点:==比较引用,equals比较内容,JVM的常量池可以节省内存开销。
B:
String str1 = new String("java");
String str2 = new String("java");
System.out.print(str1==str2);
输出:false;
关键点:A中的方式是在常量池中创建“java”对象,但是通过new,JVM会在堆中分配空间。
C:
String str1 = "java";
String str2 = "blog";
String s = str1+str2;
System.out.print(s=="javablog");
输出:false;
关键点:字符串常量池是编译时创建,String s=str1+str2运行时才能知道;即str1+str2是在堆里创建的,s引用当然不可能指向字符串常量池里的对象。
D:
String s1 = "java";
String s2 = new String("java");
System.out.print(s1.intern()==s2.intern());
输出:true;
关键点:intern方法~参考jdk文档;通过它可以比较字符串的内容
E:
String str1 = "java";
String str2 = new String("java");
System.out.print(str1.equals(str2));
无论在常量池还是堆中的对象,用equals()方法比较的就是内容
0 请登录后投票
   发表时间:2010-10-01  
差点被迷惑了
0 请登录后投票
   发表时间:2010-10-01  
看了大家的回复 才知道JavaEYE有的菜鸟这么多哈`~
看了答案竟然还不明白为什么~~
我越发觉得 自己做软件 还是有前途的`~
0 请登录后投票
   发表时间:2010-10-01  
mingkongeye 写道
这就是脑残...
中国软件为什么总上不去.....
难道细心代表一个项目的成败?

至少不细心,项目肯定不会成功
0 请登录后投票
   发表时间:2010-10-02  
看到大家的讨论忽然觉得自己老了
曾经也很热衷于此类问题
0 请登录后投票
   发表时间:2010-10-02  
应该是fasle,如果是用a.equals(b)就是true了
0 请登录后投票
   发表时间:2010-10-02  
写过类似的代码就知道问题所在了,看题目我就有给a==b加上括号的冲动
刚写代码的时候经常会写System.out.println("the result is"+a+b)
吸取经验以后复合运算养成了加括号的习惯,哪怕优先级跟不加一样
比如
1+(2*3)
0 请登录后投票
   发表时间:2010-10-02  
对于ref,==比较的是地址,FALSE
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics