zoukankan      html  css  js  c++  java
  • Java基础__Integer类型中的自动装箱

      Integer类型的自动装箱:就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。 

     

    package Text;
    
    public class Gary {
           public static void main(String[] args) {
                //true
                Integer a1 = 127, b1 = 127;
                System.out.println(a1==b1);
                //false
                Integer a2 = new Integer(127);  
                Integer b2 = new Integer(127);  
                System.out.println(a2 == b2);   
                //false
                Integer a3=128, b3 = 128;
                System.out.println(a3==b3);
                //true
                Integer a4=128, b4 = 128;
                System.out.println(a4.equals(b4));
            }
    }
    Gary.java

      注意点:"=="可以用于原始值进行比较,也可以用于对象进行比较,当用于对象与对象之间比较时,比较的不是对象代表的值,而是检查两个对象是否是同一对象,这个比较过程中没有自动装箱发生。进行对象值比较不应该使用”==“,而应该使用对象对应的equals方法

    原因分析:

      第一个使用"=="判断 Integer a1 = 127 和 Integer  b1 = 127

      相等原因:Integer的取值范围是-128~127

      第二个使用"=="判断Integer a2 = new Integer(127) 和 Integer b2 = new Integer(127)

      不相等原因:装箱时,java为了提高效率,IntegerCache类中有一个数组将-128<=i<=127范围之内的数据打包成缓存里的Integer对象了,因此不用new,这个区间里的值用直接=赋值方法得到的变量地址就是同一个,而超出这个范围的数值就会new一个Integer对象出来

      第三个使用"=="判断Integer a3=128 和 Integer  b3 = 128

      不相等原因:因为Integer类型赋值范围在-128---127之间,超出这个范围的数值就会重新new一个Integer对象出来,直接用==去比较是比较a3和b3的地址,a3和b3的地址是不相等的

      第四个使用使用"=="equals()方法判断Integer a4=128 和 Integer b4 = 128

      相等原因:使用equals()方法比较的是a4和b4的数值

      Java自动装箱的优点:对-128到127的Integer对象进行缓存,当创建新的Integer对象时,如果符合这个这个范围,并且已有存在的相同值的对象,则返回这个对象(地址),不需要再创建一个新的Integer对象,否则创建新的Integer对象

      Java自动装箱的缺点:因为自动装箱会隐式地创建对象,像前面提到的那样,如果在一个循环体中,会创建无用的中间对象,这样会增加GC压力,拉低程序的性能。所以在写循环时一定要注意代码,避免引入不必要的自动装箱操作

     

    (如需转载学习,请标明出处)
  • 相关阅读:
    【CF1027C】Minimum Value Rectangle(贪心,数学)
    【CF1027B】Numbers on the Chessboard(数学)
    【CF1027A】Palindromic Twist(模拟)
    【CF1023C】Bracket Subsequence(模拟)
    【CF1023B】Pair of Toys(解方程)
    【CF1023A】Single Wildcard Pattern Matching(模拟)
    【CF1020C】Elections(贪心)
    【CF1020B】Badge(模拟)
    【CF1020A】New Building for SIS(签到)
    【CF1017D】The Wu(状压前缀和)
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/8552928.html
Copyright © 2011-2022 走看看