java == 运算符
String aStr = new String("Hello");
String bStr = "Hello";
System.out.println(aStr == "Hello");
System.out.println(bStr == "Hello");
为什么
aStr==Hello会是
false?而
bStr=Hello可以为
true
------解决方案--------------------
放屁。
String 有个字符串缓冲池,每次直接赋值的字符串会放在里面,如果下次在用的话,就从里面取。
new的时候不会放进去,是新的。
------解决方案-------------------- 其实堆栈可以讲明白java引用中绝大多数的问题,包括这个,直接定义的在栈中,栈中的不重复,new出来的在堆中,aStr == "Hello" 让一个栈中的引用对象和一个栈中的常量比较,那肯定不相等了。bStr 就在栈中定义,栈中的对象又不重复,所以bStr == "Hello" 就相等了。好了,这个问题就说到这里吧,如有意见,也请不要骂人,可以好好讨论技术。
------解决方案--------------------这是我个人见解:
aStr引用堆里的地址,而bStr引用的是常量池的地址,首先new String("Hello")时,就会在堆里开劈一个空间,然后去常量池看有没有Hello这个常量,如果没有就创建一个,并把引用存放在堆开劈的空间里。而aStr引用的是堆里的地址,所以当aStr与"Hello"比较时两者的地址都不一样所以为false.而bStr却是直接去常量池找,并获取"Hello"的引用