zoukankan      html  css  js  c++  java
  • 请介绍一下Java里integer和int的区别,以及如何比较相等?

    问题:请介绍一下Java里integer和int的区别,以及如何比较相等?

    答:

    1.Integer是int的包装类,int是基本数据类型。

    2.Integer变量必须实例化以后才能使用,int不用

    3.Integer实际上是一个对象,int只是数据值。

    4.Integer默认Null,int默认0

    下面是一些Integer 的用法和注意事项:

    • “==”和equals():Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(new生成的是两个对象,其内存地址不同)。
      • 在Integer类中,“==”用来比较对象地址是否相同,并且Integer类重写了equals(Object obj)方法,在equals(Object obj)方法中,会先判断参数中的对象obj是否是Integer类型的对象,如果是则判断值是否相同,值相同则返回true,值不同则返回false,如果obj不是Integer类的对象,则返回false。需要注意的是:当参数是基本类型int时,编译器会给int自动装箱成Integer类,然后再进行比较。

        既然提到了拆箱和装箱, 装箱就是由基本数据类型封装成类的过程, 反而反之

        那么

        什么时候会拆箱?——基本数据类型和引用数据类型做运算时

        什么时候会装箱?——基本数据类型赋值给引用数据类型的时候。


    • 1 Integer i = new Integer(1);
      2 Integer j = new Integer(1);
      3 System.out.print(i == j); 
      4 //false
    • Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)
      1 Integer i = new Integer(1);
      2 int j = 13 System.out.print(i == j); 
      4 //true
    • 非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。(因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同)
      1 Integer i = new Integer(1);
      2 Integer j = 1;
      3 System.out.print(i == j); 
      4 //false
    • 对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false
      1 Integer i = 1;
      2 Integer j = 1;
      3 System.out.print(i == j); 
      4 //true
      Integer i = 128;
      Integer j = 128;
      System.out.print(i == j); 
      //false

      这条乍看起来绝对是蒙蔽的, 一样的方式怎么有的时候返回真有的时候为假呢?
      因为JVM中一个字节一下的整型数据(即[128,127])会在JVM启动时加载进内存,除非用new Integer()显示的创建对象,否则都是同一对象。

      Integer i = 1时,会将1进行缓存,下次再写Integer j = 1时,就会直接从缓存中取,就不会new了, 这样取到的1 地址也是相同的, ==判断返回真,

      对于-128到127范围之外的数 实际上就是new得到的, 地址不同==判断为假

      对于这点感兴趣的可以看看这个解释:

      java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100);
      所以关键就是看valueOf()函数了。JDK源码的valueOf()是这样的:

      1 public static Integer valueOf(int i)
      2 {
      3     assert IntegerCache.high >= 127;
      4     if (i >= IntegerCache.low && i <= IntegerCache.high)
      5     {
      6         return IntegerCache.cache[i + (-IntegerCache.low)];
      7     }
      8     return new Integer(i);
      9 }

      Integer的 属性和方法 

      https://www.cnblogs.com/LinQingYang/p/12467233.html

      官方API ——Interger
      https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

      


    引用地址

    https://www.nowcoder.com/questionTerminal/93d752877f3b4f8282b6d230f22aa430?orderByHotValue=1&page=1&onlyReference=false
    来源:牛客网


    版权声明:本文为CSDN博主「NO0b」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/q5706503/article/details/83386365

  • 相关阅读:
    UI 简单练习(联动实例)
    软件工程与计算机科学
    中文编程
    自我介绍
    曾经的梦想
    即时通讯研究学习
    即时通讯研究学习
    创业
    2015-08-12-火影
    看<后海不是海>的随想
  • 原文地址:https://www.cnblogs.com/LinQingYang/p/12489763.html
Copyright © 2011-2022 走看看