Integer的创建和比较

Integer有三种创建方式

Integer i = Integer.valueOf(1) ;
Integer i = 1 ; 
Integer i = new Integer(1) ;
1. Integer i = Integer.valueOf(1)
public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
  • Integer.valueOf(1),会先从缓存常量池中拿值
  • jdk1.5之后 ,Integer.valueOf() 中有个内部类 IntegerCache,类似于一个常量数组,也叫对象池,它维护了一个 Integer 数组 cache,长度为(128+127+1)=256,意味着 Integer 缓存池的大小默认为 -128 ~ 127 ;
  • Integer类中还有一个静态代码块,默认创建了数值【-128-127】的 Integer 缓存数据;所以当 Integer.valueOf(1) 的时候,会直接在该在对象池找到该值的引用;
  • 在 jdk 1.8 中,在启动 JVM 的时候,可以通过配置来指定这个缓冲池的大小
2. Integer i = 1
 Integer i = 1
  • Integer 是int的包装类,这样的写法会自动装箱,装箱操作是由Integer.valueOf()方法完成的,所以 Integer i = 1 等于 Integer i = Integer.valueOf(1)
3. Integer i = new Integer(1)
Integer i = new Integer(1)
  • Integer的构造方法,创建一个新的Integer对象

比较不同

public static void main(String[] args) {
        Integer a = 127;
        Integer b = 127;
        Integer c = Integer.valueOf(127);
        Integer d = Integer.valueOf(127);
        Integer e = new Integer(127);
        Integer f = new Integer(127);   
        //这三种创建方式有何不同?
        System.out.println("Integer = 127 方式 :      " + (a == b));
        System.out.println("Integer.valueOf() 方式 :" + (c == d));
        System.out.println("new Integer() 方式 :    " + (e == f));
        //当值在 -128~127之间时,Integer = 127 和Integer.valueOf() 会先从常量池池中拿值
        System.out.println("--------");
        System.out.println("a.equals(b) :" + a.equals(b));
        System.out.println("c.equals(d) :" + c.equals(d));
        System.out.println("e.equals(f) :" + e.equals(f));
    }

另外,比较大小可以使用compareTo()方法
源码:

//先把Integer拆箱成int
public int compareTo(Integer anotherInteger) {
        return compare(this.value, anotherInteger.value);
    }
//比较xy,x>y,返回1;x==y,返回0;x<y,返回-1             ↓
public static int compare(int x, int y) {
        return (x < y) ? -1 : ((x == y) ? 0 : 1);
    
public static void main(String[] args) {
        Integer i1 =  200;
        Integer i2 =  300;
        Integer i3 =  100;
        Integer i4 =  200;
        System.out.println("i1 < i2 :"+i1.compareTo(i2));
        System.out.println("i1 > i3 :"+i1.compareTo(i3));
        System.out.println("i1 = i3 :"+i1.compareTo(i4));
    }

结果:

i1 < i2 :-1
i1 > i3 :1
i1 = i3 :0

综上:

  • 两个Integer比较的时候要用equals()方法
  • int和Integer比较可以用 > < ==
  • 比较大小可以使用compareTo()方法,x>y,返回1;x==y,返回0;x<y,返回-1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,请问您需要创建的是一个整数对象吗?如果需要,您可以使用以下代码创建一个Integer实例对象: Integer myInteger = new Integer(123); 其中,123是所需的整数值。 ### 回答2: 要创建Integer实例对象,可以使用以下三种方法: 1. 使用Integer的构造函数: Integer类有多个构造函数,可以接受不同类型的参数。其中,最常用的是接受int类型参数的构造函数。例如,使用以下代码创建一个Integer对象: ```java Integer myInteger = new Integer(10); ``` 这将创建一个值为10的Integer对象。 2. 使用Integer的valueOf方法: Integer类还提供了一个静态方法valueOf,可以将int类型的值转换为Integer对象。例如,可以使用如下代码创建一个Integer对象: ```java Integer myInteger = Integer.valueOf(10); ``` 这将创建一个值为10的Integer对象。 3. 使用自动装箱特性: 自动装箱是Java中一项特性,允许直接将基本数据类型自动转换为对应的包装类对象。例如,可以使用以下代码创建一个Integer对象: ```java Integer myInteger = 10; ``` 这将自动将int类型的值10转换为一个Integer对象。 无论是使用构造函数、valueOf方法还是自动装箱特性创建Integer对象,都可以使用该对象进行数值操作或传递给需要Integer类型参数的方法。 ### 回答3: 创建Integer实例对象可以通过以下几种方式实现: 1. 使用Integer的构造方法创建对象: Integer num = new Integer(100); 这种方式直接使用Integer类的构造方法,将一个整数值作为参数传递,并返回一个Integer对象。 2. 使用Integer类中的valueOf方法创建对象: Integer num = Integer.valueOf(100); 这种方式是通过调用Integer类的静态方法valueOf,将一个整数值作为参数传递,并返回一个Integer对象。 3. 使用自动装箱功能创建对象: Integer num = 100; 这种方式是利用Java的自动装箱特性,将一个整数直接赋值给一个Integer对象,Java会自动将其转换成Integer对象。 无论是使用构造方法、valueOf方法还是自动装箱功能创建Integer实例对象,都可以通过调用Integer对象的方法来进行整数值的操作,如加减乘除等运算,或者进行类型转换,如将Integer对象转换为int类型的值等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值