黑马程序员技术交流社区
标题:
java基础,APIString型的判断。求大神。
[打印本页]
作者:
岳鹏
时间:
2016-9-1 19:11
标题:
java基础,APIString型的判断。求大神。
String s4 = "你";
String s5 = "好吗";
System.out.println("你好吗" == (s4 + s5));
String s8 = "你好吗";
String s6 = "你";
String s7 = "好吗";
System.out.println(s8 == (s6 + s7));
String s1 = "ab";
String s2 = "ab" + "c";
System.out.println("abc" == s2);
结果是啥,为什么?
作者:
小超超
时间:
2016-9-1 20:14
共同学习下
作者:
gcno93
时间:
2016-9-1 20:35
自己把代码贴到编译器测测!
作者:
obvilion
时间:
2016-9-1 20:51
前两个为false
最后的为true
这是因为JVM中的常量优化机制和==号的性质共同导致的
==号两端若是引用数据类型则比较的是地址值
基本数据类型则是比较数据值
先说最后的
String s2 = "ab" + "c";
在做赋值操作时;
此时JVM会创建一个new String("abc"),并将其放入方法区的常量池中
将常量池中的地址值赋给s2;
System.out.println("abc" == s2);
在调用时会先看常量池中是否有"abc",有的话就会将常量池中的地址值放入==号左端;
所以==号左右两端地址值相同就返回了true.
至于前两个
由于==号右边都是两个变量相加,在做运算时不会在常量池中去找,而是直接创建新的对象,新创建的对象的地址值和常量池中的地址值必然不同,所以返回false
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2