java中不同的新字符串和新整数?
a和a2是指针,内存相同,b和b2是对象不相同的内存,a=b、 还有b=b2,为什么?c=d和d=d2,新字符串是object,新整数不是object 新字符串是对象,新整数不是对象 因为您立即将java中不同的新字符串和新整数?,java,Java,a和a2是指针,内存相同,b和b2是对象不相同的内存,a=b、 还有b=b2,为什么?c=d和d=d2,新字符串是object,新整数不是object 新字符串是对象,新整数不是对象 因为您立即将整数s指定给基本类型,而不是对象类型。如果你写过 String a="ABC"; String a2="ABC"; //-------------------------------------- String b=new String("ABC"); String b2=new Strin
整数
s指定给基本类型,而不是对象类型。如果你写过
String a="ABC";
String a2="ABC";
//--------------------------------------
String b=new String("ABC");
String b2=new String("ABC");
//-----------------------------------------
int c=5;
int c2=5;
//-------------------------------------
int d=new Integer(5);
int d2=new Integer(5);
//----------------------------------------
然后
d!=d2
正如预期的那样,尤其是因为对new
的任何两个不同调用的结果都将是=代码>相互关联。案例1
Integer d=new Integer(5);
Integer d2=new Integer(5);
此字符串将添加到字符串池中
因此,在字符串池中创建新字符串时,jvm是否检查字符串池中是否存在相同的字符串?如果存在,则新字符串将引用相同的字符串池字符串
所以a和a2指向相同的内存
案例2
String a="ABC";
String a2="ABC";
在此场景中,将添加新的字符串对象。如果您想为上述语句指定相同的内存,则必须使用
String b=new String("ABC");
String b2=new String("ABC");
所以b和b2不是同一个对象
案例3
String b=new String("ABC").intern();
String b2=new String("ABC").intern();
它们是原语
案例4
int c=5;
int c2=5;
案例3和案例4您将原语值与整数对象引用值进行比较,因此它不匹配
所以你的案子也归假
引用嗯,您将新的整数
存储在一个int
中,因此它立即被解除了绑定。如果将它们存储在Integer
变量中,则情况会有所不同;整数b=1;如果(a==b)代码>嗯。就我自己而言,我更希望发生编译错误。@laune:一旦你用=
比较了两个对象与有用的.equals
实现,你就做错了。现在我明白你的第一句话了。但测试对象身份仍然是必要的。如果==会导致编译错误,则需要另一个运算符。关心引用相等的对象应该在其.equals
方法中继承它,因此您可以在任何地方使用.equals
。非常罕见的情况下,这是必要的,所以我可以接受它是一个可抑制的警告。你对案例4的解释有问题。如果使用new
关键字创建实例,则不会使用缓存。所以newinteger(5)==newinteger(5)
是false
。
int d=new Integer(5);
int d2=new Integer(5);