java基本数据类型对象包装类,为什么都会出现两种不同的结果
class Test
{
public static void main(String[] args)
{
Integer x = new Integer("123");
Integer y = new Integer(123);
sop("x==y:"+(x==y));
Integer m = 127;
Integer n = 127;
sop(m==n);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
输出
x==y:false
true
Integer x = new Integer(123);
Integer y = new Integer(123);
如果你这样写同样也会输出false, 主要是因为使用的new关键字, 使得m和n的内存地址就不一样了
Integer x = new Integer(123);
Integer y = new Integer("123");
Integer _x = Integer.valueOf(x);
Integer _y = Integer.valueOf(y);
这样是会输出true的
你一个是字符串123转换过来的。一个是整形123转换过来。他们两者不是同一个对象。所以为false
Integer x = new Integer("123"); new每次都会在堆内存创建一个空间,所有x,y是在不同的内存空间。
Integer m = 127; 会在栈内存开辟一块空间存放,当创建 Integer n = 127时,他会先去栈内存找,发现有127,n就会指向127的地址。栈能实现数据共享
栈和堆都是内存区域。堆用来存放引用对象,new一个对象之后就会在内存中的堆里开辟一片空间给这个对象,
栈可以存放值类型,和值的引用