基本数据类型与引用数据类型比较问题

发布时间 2023-06-28 18:19:19作者: 道成空

一、比较的是值

1.基本数据类型与引用数据类型进行比较时,引用数据类型会进行拆箱,然后与基本数据类型进行值的比较。

int i = 12;
Integer j = new Integer(12);
i == j // 返回的是true

2.引用数据类型与基本数据类型进行比较(equals方法),基本数据类型会进行自动装箱,与引用数据类型进行比较,Object中的equals方法比较的是地址,但是Integer类已经重写了equals方法,只要两个对象的值相同,则可视为同一对象。

int i = 12;
Integer j = new Integer(12);
j.equals(i) // 返回的是true

二、比较的是地址

1.如果引用数据类型是Integer i = 12;这样,则直接从常量池取对象,这是如果数值是在-128与127之间,则视为同一对象,否则视为不同对象。

Integer i = 12;
Integer j = 12;
i == j // 返回的是true

Integer i = 128;
Integer j = 128;
i == j // 返回的是false

2.如果引用数据类型是直接new的话,不管值是否相同,这时两个对象都是不相同的,因为都会各自在堆内存中开辟一块空间。

Integer i =new Integer(12);
Integer j = new Integer(12);
i == j // 这时返回的是false;

3.从常量池取对象跟new出来的对象也是不同的。

Integer i = 12;
Integer j = new Integer(12);
i == j // 这时返回的是false