锁定老帖子 主题:一道邪恶的java基础题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (5)
|
|
---|---|
作者 | 正文 |
发表时间:2010-09-30
这就是脑残...
中国软件为什么总上不去..... 难道细心代表一个项目的成败? |
|
返回顶楼 | |
发表时间:2010-09-30
试了一下,如果没有前面的“***”+的话确实是true,但是加了以后就是false。这应该说明String是能用==直接比较的。也说明了运算符的优先级。
|
|
返回顶楼 | |
发表时间: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()方法比较的就是内容 |
|
返回顶楼 | |
发表时间:2010-10-01
差点被迷惑了
|
|
返回顶楼 | |
发表时间:2010-10-01
看了大家的回复 才知道JavaEYE有的菜鸟这么多哈`~
看了答案竟然还不明白为什么~~ 我越发觉得 自己做软件 还是有前途的`~ |
|
返回顶楼 | |
发表时间:2010-10-01
mingkongeye 写道 这就是脑残...
中国软件为什么总上不去..... 难道细心代表一个项目的成败? 至少不细心,项目肯定不会成功 |
|
返回顶楼 | |
发表时间:2010-10-02
看到大家的讨论忽然觉得自己老了
曾经也很热衷于此类问题 |
|
返回顶楼 | |
发表时间:2010-10-02
应该是fasle,如果是用a.equals(b)就是true了
|
|
返回顶楼 | |
发表时间:2010-10-02
写过类似的代码就知道问题所在了,看题目我就有给a==b加上括号的冲动
刚写代码的时候经常会写System.out.println("the result is"+a+b) 吸取经验以后复合运算养成了加括号的习惯,哪怕优先级跟不加一样 比如 1+(2*3) |
|
返回顶楼 | |
发表时间:2010-10-02
对于ref,==比较的是地址,FALSE
|
|
返回顶楼 | |