精华内容
下载资源
问答
  • Integer比较

    2019-09-29 18:27:21
    这个Integer比较真的是坑啊.......... 先看代码,大家来猜猜,看看到底会输出什么: 1 public class Test1 { 2 3 public static void main(String[] args) { 4 Integer a = 128; 5 Integer b = 128;...

    这个Integer比较真的是坑啊..........

     

    先看代码,大家来猜猜,看看到底会输出什么:

     1 public class Test1 {
     2 
     3     public static void main(String[] args) {
     4         Integer a = 128;
     5         Integer b = 128;
     6         int c = 128;
     7         System.out.println(a==b);
     8         System.out.println(b==c);
     9         System.out.println(c==b);
    10         
    11         System.out.println("=========");
    12         Integer a1 = 10;
    13         Integer b1 = 10;
    14         int c1 = 10;
    15         System.out.println(a1==b1);
    16         System.out.println(b1==c1);
    17         System.out.println(c1==b1);
    18         System.out.println("=========");
    19         
    20         int a11 = 10;
    21         Integer b11 = new Integer(10);
    22         System.out.println(a11== b11);     //Line 1
    23 
    24         Integer a2 = 127;
    25         Integer b2 = 127;
    26         System.out.println(a2==b2);     //Line 2
    27 
    28         Integer a3 = 128;
    29         Integer b3 = 128;
    30         System.out.println(a3 == b3);   //Line 3
    31 
    32         Integer a4 = new Integer(10);
    33         Integer b4 = new Integer(10);
    34         System.out.println(a4==b4);     //Line 4
    35         
    36     }
    37 
    38 }

     

    结果如下:

    false
    true
    true
    =========
    true
    true
    true
    =========
    true     //line 1
    true     //line 2
    false    //line 3
    false    //line 4

     

    不知猜对几道???笑哭...

    先说下我的错误思路!!!

    之前我是认为:Integer的话,不论范围多少,都是一个new 了一个对象,然后,不同的对象肯定地址也不相同,当==的时候,总是false;

    而由int-->integer自动装箱时,如果是像第8行那样,也是两个不同对象,但像第9行那样,就成了拆箱成int ,比较的就是数值大小。

    现在发现,这完完全全就是错误的!!!!!!!

     

    哭晕到厕所.....

    等会儿,容我先解释解释再去/...

     

    查了些资料,直接看源码吧,看看==这个操作到底是怎么实现的。

         /* This method will always cache values in the range -128 to 127,
         * inclusive, and may cache other values outside of this range.
         */    
       public static Integer valueOf(int i) {
            assert IntegerCache.high >= 127;
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];//返回缓存内的对象
            return new Integer(i);//如果不在区间内,则新返回一个new对象;
        }

    看到了没!!!

    这里low是-128high是127,从方法的注释中可以得知:

    [-128,127]之间,Integer总是缓存了相应数值对象,这样每次取值时都是同一个对象

    而不在此区间时,则不一定会缓存,那么取出两个同样数值大小的对象则不是同一个对象,每次都会new Integer(i);

    所以其对象的地址不同,则用==比较是自然不会成立。

    另外需要注意的是,若是直接new Integer(n),则不管n是否在[-128, 127]范围内,都是不同的对象,而当没有显示new 出对象时,则利用缓存里的对象,此时是同一个对象(都是缓存内的那个)。

     

    还有就是上述Integer与int之间的比较,可以四种:

    • 1) Integer与int类型的赋值

                    a.把int类型赋值给Integer类型。此时,int类型变量的值会自动装箱成Integer类型,然后赋给Integer类型的引用,这里底层就是通过调用valueOf()这个方法来实现所谓的装箱的。
                    b.把Integer类型赋值给int类型。此时,Integer类型变量的值会自动拆箱成int类型,然后赋给int类型的变量,这里底层则是通过调用intValue()方法来实现所谓的拆箱的。

    •  2) Integer与int类型的比较

                    这里就无所谓是谁与谁比较了,Integer == int与int == Integer的效果是一样的,都会把Integer类型变量拆箱成int类型,然后进行比较,相等则返回true,否则返回false。同样,拆箱调用的还是intValue()方法。

    •  3) Integer之间的比较

                    这个就相对简单了,直接把两个引用的值(即是存储目标数据的那个地址)进行比较就行了,不用再拆箱、装箱什么的。

    • 4) int之间的比较

                    这个也一样,直接把两个变量的进行比较

    Over....

     

    参考:

    1.Integer 大小比较遇到过的坑

    2.踩坑笔记之Integer数值比较

    3.Java中Integer与int类型的装箱和拆箱

    转载于:https://www.cnblogs.com/gjmhome/p/11530366.html

    展开全文
  • integer比较

    2019-06-13 16:37:00
    public class EqualsMethod { public static void main(String[] args) { Integer n1 =new Integer(47); Integer n2 =new Integer(47); System.out.print(n1 == n2); ...

    public class EqualsMethod

    {
        public static void main(String[] args)
        {
            Integer n1 = new Integer(47);
            Integer n2 = new Integer(47);
            System.out.print(n1 == n2);
            System.out.print(",");
            System.out.println(n1 != n2);
        }
    }

     

    首先 我们要知道 == 这个比较符号
    ==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
    "=="和"!="比较的是地址 指第一个new()c出来的地址
    所以因为两次new() 分出的内存也不同
    所以
    System.out.print(n1 == n2);返回 false

    !=就返回true

     

    还有例子

    Integer n33 = Integer.valueOf(47);
    Integer n44 = Integer.valueOf(47);
    System.out.println(n33 == n44);

    Integer n1 = new Integer(47);
    Integer n2 = new Integer(47);
    System.out.print(n1 == n2);
    System.out.print(",");
    System.out.println(n1 != n2);

    打印结果
    true
    true
    false,true

    这里有个误区所谓的缓存,是在使用valueOf的时候使用的,
    
    
    Integer n3 = Integer.valueOf(47)
    
    
    Integer n4 = Integer.valueOf(47);
    
    
    这里的n3==n4才是true。
    
    
    如果直接使用new一个对象,从构造函数来看:
    
    
        public Integer(int value) {
    
    
            this.value = value;
    
    
        }
    
    
    就是完全不同的两个对象,没有使用所谓的缓存。
     

    1.  -128<= x<=127的整数,将会直接缓存在IntegerCache中,那么当赋值在这个区间的时候,不会创建新的Integer对象,而是从缓存中获取已经创建好的Integer对象;当大于这个范围的时候,直接new Integer来创建Integer对象。

    2. new Integer(1) 和Integer a = 1不同,前者会创建对象,存储在堆中,而后者因为在-128到127的范围内,不会创建新的对象,而是从IntegerCache中获取的。
    3.int与Integer作比时,Integer会自动拆箱。
     

    转载于:https://www.cnblogs.com/zhuyeshen/p/11017448.html

    展开全文
  • Integer 比较

    2018-05-19 11:44:25
    Integer.compareTo(num1, num2);返回负整数,则表示num1&lt;num2;返回正整数,则表示num1&gt;num2;返回0,则表示num1=num2;

    Integer.compareTo(num1, num2);

    返回负整数,则表示num1<num2;

    返回正整数,则表示num1>num2;

    返回0,则表示num1=num2;

    展开全文
  • Java Integer 比较

    2020-12-23 10:02:21
    Java中的Integer比较 1.一次开发过程中比较Integer竟然用了==。。。。  Integer对象的比较,先看下代码: ...

    Java中的Integer比较

    1.一次开发过程中比较Integer竟然用了==。。。。

      Integer对象的比较,先看下代码:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    package test;

     

     

    public class IntegerEqual {

        public static void main(String[] args) {

            // TODO Auto-generated method stub

      

            Integer a = 1;

            Integer b = 1;

            Integer c = 2000;

            Integer d = 2000;

             

             

            System.out.println(a==b);

            System.out.println(c==d);

         

        }

     

    }

      相信很多人一看到这段代码,就会感觉输出的结果是true,true;实际上这段代码的输出结果是true,false;这是为什么呢?同样的对象为什么比较的结果不一样呢?

    2.结果分析

      先来分析下Integer a=1;的实现方式,1是数字是怎么放到Integer这个对象中去的;我们知道这是JDK5新增的语法自动装箱和拆箱功能实现的,可是具体的这个装箱功能室如何实现的呢?我们先来看下Integer.valueOf()这个方法,因为这是Integer默认的装箱的实现方式:

     

     

     

     

     

     

     

     

     

     

     

    /**

        * Returns a <tt>Integer</tt> instance representing the specified

        * <tt>int</tt> value.

        * If a new <tt>Integer</tt> instance is not required, this method

        * should generally be used in preference to the constructor

        * {@link #Integer(int)}, as this method is likely to yield

        * significantly better space and time performance by caching

        * frequently requested values.

        *

        * @param  i an <code>int</code> value.

        * @return a <tt>Integer</tt> instance representing <tt>i</tt>.

        * @since  1.5

        */

       public static Integer valueOf(int i) {

           if(i >= -128 && i <= IntegerCache.high)

               return IntegerCache.cache[i + 128];

           else

               return new Integer(i);

       }

      这是JDK5的时候新增的方法,先来简单分析下这个方法具体做了什么事情;原来它内部维护了一个缓存池,它总是Integer缓存池中获取Integer对象,超出了其缓存池(-128到127),它才new新的Integer对象。只要在这个范围内,都是直接取出对象而不是创建,所以值总是相等的,但是如果超过了这个范围,那么它就会创建新的对象(-2147483648到-128和127到2147483647)(Integer.MAX_VALUE:2147483647,Integer.MIN_VALUE:-2147483648),一旦是创建的对象,那么比较的是对象自然是不相等,即使值是相等的。

    3.总结

     

     

     

     

     

     

    public boolean equals(Object obj) {

     if (obj instanceof Integer) {

         return value == ((Integer)obj).intValue();

     }

     return false;

     }

      因为这个方法取得是具体的值,所以不管是多少,具体的结果总是相等的。所以比较Integer的时候不能用== 可以用equals 或者Integer.intValue ==

    展开全文
  • Java Integer比较

    2016-03-28 19:43:00
    今天看微信做了一个选择题,对Integer比较结果有点意外,题目如下: public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e ...
  • 发现做项目的过程中,在数值类型的比较上容易犯错,特别是IntegerInteger比较Integer和int的比较。虽然这些都是些基础语法,但稍不留意就容易犯错,在实际开发过程中如果出现这类失误,很容易失之毫厘谬以千里...
  • 对于 java 中 Integer 类型 比较 ,经常在面试中被提到 ,有时 还真的 让人 头疼。下面我来分析下。integer 比较问题。 解决 Integer比较问题。我想从以下几点说起。 1. Integer 的源码。 2.堆内存与常量池 ...
  • Integer与Integer比较的时候,由于直接赋值的时候会进行自动的装箱,那么这里就需要注意两个问题,一个是-128<= x<=127的整数,将会直接缓存在IntegerCache包装类缓冲区中,那么当赋值在这个区间的时候,不会...
  • 两个Integer比较大小

    2018-12-20 09:56:41
    两个Integer比较大小 因为Integer是对象类型,虽然两者内容相同,但是两者是不同的两个对象,在虚拟机中完全是不相干的2个对象,指向不同的地址。所以如果需要比较两个Integer类型的内容,需要调用intValue()方法来...
  • 先看一代代码: public static void main(String[] args) { long test = 012; float f = -412; double d = 0x12345678; Integer io1 = 59;... Integer io3 = Integer.valueOf(59); In
  • 关于Integer比较的问题

    2017-10-12 21:01:38
    Integer比较用equals原因自己百度
  • Integer比较值面试题总结 代码: public static void main(String[] args) { int a = 127; Integer a1 = 127; Integer a2 = 127; System.out.println(a == a1);//true System.out.println(a == a2);//true ...
  • Integer 比较大小

    2021-03-04 13:23:39
    在整理数据时发现有很多并没有执行方法体,后来仔细分析得知,Integer比较需要慎用 == 或者 != 比较数值过程中: 1、数值类型,值在-128 ~127的之间的数值对象,在Integer或者Long....的内.
  • 今天帮人解答了一个Integer 比较的问题,发现坑很多,总结一下遇到过的坑,没什么技术含量,只是为了记录一下,避免入坑。 先看如下几个例子,心里想一下比较结果,我会在下面分别解析公布答案。 int a1 = 10; ...
  • java中int和Integer比较

    2019-03-28 21:19:00
    java中int和Integer比较 一,类型区别 我们知道java中由两种数据类型,即基本类型和对象类型,int就是基本数据类型,而Integer是一个class,也习惯把Integer叫做int的包装类。 二,声明或实例化时区别 基本类型int在...
  • 1. 今天有朋友问了我一个关于int Integer比较的面试题 Integer a=new Integer(3);Integer b=3; // java在编译的时候,被翻译成-&gt; Integer b = Integer.valueOf(3); int c=3;System.out.println(a==b);System....
  • Integer是包装类(引用数据类型),int是基本数据类型, Integer a=12; Integer b=12; //a==b为true; Integer c=1200; Integer d=1200; //c==d为false; Integer e=new Integer(1); Integer f=new Integer(1); //...
  • 下面小编就为大家带来一篇细数java中Long与Integer比较容易犯的错误总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,626
精华内容 3,050
关键字:

integer比较