Integer与Integer比较的时候对象引用地址的变化

  1. Integer与Integer比较的时候,由于直接赋值的时候会进行自动的装箱,那么这里就需要注意两个问题,一个是-128<= x<=127的整数,将会直接缓存在IntegerCache包装类缓冲区中,那么当赋值在这个区间的时候,不会创建新的Integer对象,而是从缓存中获取已经创建好的Integer对象。当大于这个范围的时候,直接new Integer来创建Integer对象。
  2. new Integer(1) 和Integer a = 1不同,前者会创建对象,存储在堆中,而后者因为在-128到127的范围内,不会创建新的对象,而是从IntegerCache中获取的。那么Integer a = 128, 大于该范围的话才会直接通过new Integer(128)创建对象,进行装箱。
		Integer i1 = new Integer(127);
        Integer i2 = new Integer(127);
		因为
        System.out.println(i1 == i2);// false == 比的是地址,创建对象比地址,虽然没有超出范围,但是对象地址也不相同;
        //Integer 重写了equals() ,比的是值
        System.out.println(i1.equals(i2)); //true

        System.out.println("-----------");

        Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3 == i4); //false创建不同对象,存在堆中;
        System.out.println(i3.equals(i4)); //true
        System.out.println("-----------");

        Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i5 == i6);//false自动装箱,并且超出范围,会创建新的对象;
        System.out.println(i5.equals(i6)); //true
        System.out.println("-----------");

        Integer i7 = 127;
        Integer i8 = 127;
        System.out.println(i7 == i8); // true自动装箱,并且没有超出范围,调用缓冲区的数据,对象地址不会改变
        System.out.println(i7.equals(i8)); //true
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java 中的基本数据类型(如 `int`、`double`、`boolean` 等)都是按值传递的,也就是说,在将一个基本数据类型的值传递给一个方法时,实际上是将该值的一个副本传递给了方法,而不是该值本身。因此,对方法内部的参数进行修改不会影响到原始值。 而对于对象类型(如 `String`、`List`、`Map` 等)来说,变量存储的是对象引用,而不是对象本身。因此,将一个对象作为参数传递给方法时,实际上传递的是对象引用,也就是指向该对象的一个指针。在方法内部对对象的修改会影响到原始对象。 需要注意的是,对于不可变对象(如 `String`、`Integer`、`Double` 等),修改操作实际上是创建了一个新的对象,而原始对象并没有发生变化。因此,在方法内部对不可变对象的修改并不会影响到原始对象。例如: ```java public static void main(String[] args) { String s = "Hello"; changeString(s); System.out.println(s); // 输出 Hello } public static void changeString(String str) { str += " World"; } ``` 在 `changeString` 方法中,对字符串进行了拼接操作,但是并没有修改原始字符串 `s`,因此在 `main` 方法中输出的依然是原始字符串 `Hello`。 总之,Java 中的数据类型分为基本数据类型和对象类型,对于基本数据类型,按值传递;对于对象类型,按引用传递。但是需要注意的是,在对不可变对象进行修改时,实际上是创建了一个新的对象,原始对象并没有被修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值