问题:
有个代码我判断是否等于字符串的“1”,因是新手不小心用了==,结果发生了很奇妙的问题。
Util u = new Util();
boolean result = u.getId() == "1";
Toast.makeText(this, String.valueOf(result), Toast.LENGTH_SHORT).show();
结果在手机上运行会提示true(部分华为Android版本5.0以下手机会提示false)
在IDE中调试结果是false
看截图,调度过程中代码后面显示的result:true,可是在计算窗口中显示为false。见鬼了,求解。
java内存里有个堆内存(heap),简单记忆就是凡是new出来的,都在堆内存里。
java内存还有一块区域,叫常量池,像是字符串常量,都存在这里面,比如“1”.
“1”肯定在常量池中了,关键在于u.getId()的值,是在常量池中,还是堆内存中了。这就要看Util的构造方法的源码了。截图中是直接返回“1”.那么就是说在调试中,虚拟机在常量池中分别划出来两块内存,android直接公用同一块内存了。歧视这就看编译器的心情了。以后尽量不要用==号,用equals