int 与 Integer 类型的比较

Java Integer对象比较详解
本文详细探讨了Java中Integer对象的比较方式,包括通过new关键字创建的对象比较、直接赋值的对象比较以及在不同值范围内的对象比较。文章还讨论了Integer缓存机制以及自动拆箱对比较结果的影响。

一、两个new出来的Integer对象

	public void test(){
		Integer m=new Integer(1);
		Integer n=new Integer(1);
		System.out.println(m==n);
	}
//结果返回false  
//解析:都是new出来的对象,在堆中,比较的是两个地址值;

二、new一个对象与赋值一个对象

	public void test(){
		Integer m=new Integer(1);
		Integer n=1;
		System.out.println(m==n);
	}
	//结果返回false
	//解析:m在堆中,n在常量池中,都是Integer类型,比较的是地址,因此不等。


三、两个对象的赋值

(1)值在-128~127之间(可取-128和127)

	public void test(){
		Integer m=-127;
		Integer n=-127;
		System.out.println(m==n);
		Integer m1=Integer.valueOf(-127);
		Integer n1=Integer.valueOf(-127);
		System.out.println(m1==n1);
	}
	//结果返回true
	//解析:创建的是同一个对象,这些对象已经缓存在IntegerCache里面了,因此相等

(2)值不在-127~128之间(可取-128和127)

	public void test(){
		Integer m=128;
		Integer n=128;
		System.out.println(m==n);
		Integer m1=Integer.valueOf(128);
		Integer n1=Integer.valueOf(128);
		System.out.println(m1==n1);
	}
	//结果返回false
	//解析:比较的是地址

四、int 和 Integer对象

	public void test(){
		int m=128;
		Integer n=new Integer(128);
		System.out.println(m==n);
		int m2=128;
 		Integer n2=128;
 		System.out.println(m2==n2);
		int m3=128;
  		Integer n3=Integer.valueOf(128);
  		System.out.println(m3==n3);
	}
	//结果返回true
	//Integer封装类型将会自动拆箱变为基本的数据类型int 后再进行比较,所以返回true





在Java中,`int` 和 `Integer` 是两个相关但本质不同的类型,它们之间的区别主要体现在以下几个方面: ### 1. 类型性质不同 - **`int`**:是Java中的基本数据类型(primitive data type),用于表示32位整数。 - **`Integer`**:是`int`的包装类(wrapper class),属于引用类型(class),位于`java.lang`包中。 ### 2. 默认值不同 - **`int`**:作为类成员变量时,默认值为`0`。 - **`Integer`**:作为类成员变量时,默认值为`null`,这表示它可以表示没有值的状态。 ### 3. 内存占用不同 - **`int`**:固定占用32位(4字节)内存。 - **`Integer`**:除了存储实际的整数值外,还需要额外的空间来保存对象信息(如对象头等),因此通常占用更多的内存。 ### 4. 使用场景不同 - **`int`**:适用于需要高性能的场合,比如大量数值运算或数组操作。 - **`Integer`**:适用于需要将整数作为对象处理的场合,例如集合框架(如`ArrayList<Integer>`、`HashMap<Integer, String>`)以及泛型编程。 ### 5. 自动装箱拆箱(Java 5 及以上) Java 5 引入了自动装箱(autoboxing)和拆箱(unboxing)机制: - **自动装箱**:将`int`自动转换为`Integer`对象。 - **自动拆箱**:将`Integer`对象自动转换为`int`。 示例代码如下: ```java int primitive = 10; Integer wrapper = primitive; // 自动装箱 int unboxed = wrapper; // 自动拆箱 ``` ### 6. 比较行为不同 - 对于`int`,使用`==`直接比较值是否相等。 - 对于`Integer`对象,使用`==`比较的是对象的引用地址,而不是值。要比较值应使用`.equals()`方法或者自动拆箱。 注意:对于 `-128 ~ 127` 范围内的`Integer`对象,Java会缓存这些常用值,所以在这个范围内使用`==`可能也会返回`true`,但这不是推荐的做法。 示例: ```java Integer a = 127; Integer b = 127; System.out.println(a == b); // true,因为缓存 Integer c = 128; Integer d = 128; System.out.println(c == d); // false,超出缓存范围 System.out.println(c.equals(d)); // true,比较的是值 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值