interger与int

在正式引入正题之前,我们先来先来看一个问题:

public class Test {
    public static void main(String[] args) {
        int f1=100, f2=100, f3=150, f4=150;
        System.out.println(f1 == f2);
        System.out.println(f3 == f4);
    }
}

上面的代码的执行结果:

在这里插入图片描述

对于上面的结果,大家都没有任何异议吧,那面下面这段代码呢?

public class Test {
    public static void main(String[] args) {
        Integer f1=100, f2=100, f3=150, f4=150;
        System.out.println(f1 == f2);
        System.out.println(f3 == f4);
    }
}

肯定会有人认为这个输出结果,要么全是true,或全是false吧,结果真的是这样吗?我们一起来看一下结果:

在这里插入图片描述
惊不惊喜,意不意外,为什么会出现这样的结果呢。

首先我们要知道int是基本类型,Interger是引用类型。其次,我们要知道,“==“在对基本类型比较的是值,而在比较高引用类型时,比较的是对象的地址值是否一致。

清楚上面两点后,我们估计对第一个代码的运行结果,彻底明白了,那我们来看第二个的原因:

java API中对Integer类型的valueOf的定义如下,对于-128到127之间的数,会进行缓存,Integer i = 100时,会将100进行缓存,下次再写Integer j = 100时,就会直接从缓存中取,就不会new了。

Java 中 Integer int 存在多方面的区别: - **类型层面**:Integer 是 int 的包装类,属于引用类型;而 int 是 Java 的一种基本数据类型[^2][^4]。 - **实例化存储方式**:Integer 变量必须实例化后才能使用,它实际上是对象的引用,当使用 `new` 创建一个 Integer 时,会生成一个指针指向此对象;int 变量不需要实例化,它直接存储数据值[^2][^4]。 - **默认值**:Integer 的默认值是 null,int 的默认值是 0[^2][^4]。 - **`==` 比较**: - 两个通过 `new` 生成的 Integer 变量永远不相等,因为 `new` 生成的是两个不同的对象,其内存地址不同。示例代码如下: ```java Integer i = new Integer(100); Integer j = new Integer(100); System.out.println(i == j); // 输出 false ``` - Integer 变量和 int 变量比较时,只要两个变量的值相等,则结果为 true。因为包装类 Integer 和基本数据类型 int 比较时,Java 会自动拆包装为 int,然后进行比较,实际上就变为两个 int 变量的比较。示例代码如下: ```java Integer i = new Integer(100); int j = 100; System.out.println(i == j); // 输出 true ``` - 非 `new` 生成的 Integer 变量和 `new Integer()` 生成的变量比较时,结果为 false。因为非 `new` 生成的 Integer 变量指向的是 Java 常量池中的对象,而 `new Integer()` 生成的变量指向堆中新建的对象,两者在内存中的地址不同。示例代码如下: ```java Integer i = new Integer(100); Integer j = 100; System.out.println(i == j); // 输出 false ``` - 对于两个非 `new` 生成的 Integer 对象,进行比较时,如果两个变量的值在区间 -128 到 127 之间,则比较结果为 true;如果两个变量的值不在此区间,则比较结果为 false。示例代码如下: ```java Integer i = 100; Integer j = 100; System.out.println(i == j); // 输出 true Integer m = 128; Integer n = 128; System.out.println(m == n); // 输出 false ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值