lil*_*oka 4 java autoboxing equals
我被告知从不使用==字符串而是用于其他所有内容,因为它.equals会比较值而不是对象的实例.(我理解其中的区别).
根据一些网站,==比较内存位置?
我不明白的是,如果你将一个整数与另一个整数进行比较,为什么它会比较内存位置,还是仅仅用于字符串?
如果你将int 3与int 4进行比较,显然它不会在同一个内存位置,但是如果你将int 4与int 4进行比较,那是否意味着所有值为4的整数都存储在同一个内存中记忆位置?
aio*_*obe 12
根据一些网站,
==比较内存位置?
表达a == b比较内容的a和b无论其类型.
我不明白的是,如果你将一个整数与另一个整数进行比较,为什么它会比较内存位置,还是仅仅用于字符串?
如果a和b是引用的==,因为这是该变量包含运营商将比较"内存位置".
在壳体a和b是原始类型,如int或double的变量将包含实际值,因而这些值(而不是它们的位置)进行比较.
(注意,变量永远不能包含诸如a之类的对象String,它最多只能指向一个对象.)
这是否意味着值为4的所有整数都存储在同一个内存位置?
不.如上所述,int"直接"比较s.说到Integer这个故事略有不同.首先,new 保证你获得一个新的参考,即
Object i = new Integer(5);
Object j = new Integer(5);
... i == j ...
Run Code Online (Sandbox Code Playgroud)
永远都会产生错误.
但是,如果你经历自动拳击:
Object i = (Integer) 5;
Object j = (Integer) 5;
... i == j ...
Run Code Online (Sandbox Code Playgroud)
你会得到真实的,因为自动装箱会通过缓存获取-128-127范围内的值.(例如,参见这个问题:比较两个整数:为什么==是真的?)
== 比较操作数的值,无论它是原始类型还是引用类型。
如果操作数是原始操作数,则将比较操作数的值。
作为引用的操作数包含值,即访问它们所引用的对象的地址。字符串不是原始数据类型,它们在java中被视为对象,当您比较字符串类型的两个引用时,仅当操作数的值(即字符串对象的地址)相等时,结果才会为真(这意味着它们引用到同一个 String 对象)。