首页 > 试题广场 >

Integer a = 1; Integer b = 1;

[单选题]
Integer a = 1;
Integer b = 1;
Integer c = 500;
Integer d = 500;
System.out.print(a == b);
System.out.print(c == d);
上述代码返回结果为:
  • true、true
  • true、false
  • false、true
  • false、false
Integer类型在-128-->127范围之间是被缓存了的,也就是每个对象的内存地址是相同的,赋值就直接从缓存中取,不会有新的对象产生,而大于这个范围,将会重新创建一个Integer对象,也就是new一个对象出来,当然地址就不同了,也就!=;
发表于 2019-08-13 15:19:49 回复(47)
棖头像
Interger的范围时[-128,127],在这个范围内比较大小,相等为true,超过范围为false
发表于 2019-05-25 21:14:41 回复(13)
Integer a = 1;是自动装箱会调用Interger.valueOf(int)方法;该方法注释如下:
This method will always *** values in the range -128 to 127 inclusive, and may *** other values outside of this range.
也就是说IntegerCache类缓存了-128到127的Integer实例,在这个区间内调用valueOf不会创建新的实例。
发表于 2019-07-06 21:01:23 回复(3)

一、包装类和基本数据类型在进行“==”比较时,包装类会自动拆箱成基本数据类型,integer(0)会自动拆箱,结果为true

二、两个integer在进行“==”比较时,如果值在-128和127之间,结果为true,否则为false

三、两个包装类在进行“equals”比较时,首先会用equals方法判断其类型,如果类型相同,再继续比较值,如果值也相同,则结果为true

四、基本数据类型如果调用“equals”方法,但是其参数是基本类型,此时此刻,会自动装箱为包装类型

编辑于 2019-08-27 11:14:21 回复(3)
Integet中有128个预先定义好的
发表于 2019-05-23 21:26:13 回复(0)
Integer里会默认缓存[-128,,127]数值的大小,也就是1Byte,当数值在这个范围内时,Integer不会创建新的对象,所以a和b属于同一个对象且值相等,返回true;c和d超出了该范围,会创建c和d两个不同的对象,虽然值相等,也会返回false。
发表于 2019-11-14 21:39:58 回复(1)

自动装箱语法糖

Integer
  • 代码

    Integer a = 1;
    Integer b = 1;
    Integer c = 500;
    Integer d = 500;
    System.out.println(a==b);  // true
    System.out.println(c==d);  // false
  • 原因:

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
    // IntegerCache.low = -128,IntegerCache.high=127
    • Integer的自动装箱会调用valueOf方法,该方***缓存-128~127之间的数据(配置了255个Integer对象),赋值在这个区间之内就直接返回一个对象,所以两次返回的是同一个对象
    • 不在-128~127区间内的值都会重新申请一个对象,所以两次对象不一样。
Character
  • 代码:

    Character a = 'c';
    Character b = 'c';
    Character c = '开';
    Character d = '开';
    System.out.println(a==b);   // true
    System.out.println(c==d);   // false
  • 原因:

    public static Character valueOf(char c) {
        if (c <= 127) { // must cache
            return CharacterCache.cache[(int)c];
        }
        return new Character(c);
    }
    • Integer,都会有一个缓存。字符的值小于127就会被缓存。大于127就会重新构建一个对象
DoubleFloat
  • 代码

    Double a = 1.0;
    Double b = 1.0;
    Double c = 500.0;
    Double d = 500.0;
    System.out.println(a==b);  // false
    System.out.println(c==d);  // false
  • 原因:

    public static Double valueOf(double d) {
        return new Double(d);
    }
    • 没有缓存,所以每次就是直接new一个对象
    • Float同Double
发表于 2020-04-01 16:18:54 回复(0)
Integer是int的包装类,不属于基础数据类型,而是一个类。也表示一个整型的数字,不能被算术运算符进行加,乘,减,除等操作,只能用另外的方法进行算术运算或转换成int在进行运算。在参数传递的时候,传递的是它所表示的对象的一个引用。
例如Integer的初始化可以这样
Integer i= new Integer(233);
但有自动装箱和拆箱,所以也可以
Integer i= 233;

因此,使用==对Integer类比较的是其内存地址

而Integer类有预定义区间[-128~127],在该范围内使用的地址是相同的    =》第一个为true
超过该范围时地址不同    =》第二个为false
(如果使用equals方法比较,都是true)
发表于 2019-08-14 13:19:25 回复(1)
Integer范围是-128-127
发表于 2019-05-25 16:07:10 回复(0)

Integer类型在-128-->127范围之间是被缓存了的,也就是每个对象的内存地址是相同的,赋值就直接从缓存中取,不会有新的对象产生,而大于这个范围,将会重新创建一个Integer对象,也就是new一个对象出来,当然地址就不同了
发表于 2021-12-02 11:06:07 回复(0)
-128~127存在常量池内,超过就要new新的
发表于 2022-04-24 17:03:21 回复(0)
又栽了,若[-128,127]则不会new一个对象,否则则会new一个新对象,所以c,d是两个不同对象,故地址不相同
发表于 2022-04-19 11:26:22 回复(0)
java为了提高执行效率,将【-128,127】之间所有的包装对象提前创建好,放到一个方法区的“整型常量池”中,目的是只要用到这个区间的数据不需要再new了,直接从整数常量池中取出。简单的说:不在这个范围的就要在“堆区”中自动 new 一个对象出来,new 对象出来后,则它们之间存储的地址不同了。
发表于 2021-03-06 15:28:22 回复(0)

Integer对象不可变,
Java默认缓存了[-128, 127]之间的对象,
自动装箱或者调用Integer.valueOf会使用被缓存的对象,
被缓存的对象地址相同,
而new Integer得到的地址不同.

本题的500超出了默认范围,
c和d引用的对象不同

发表于 2020-05-28 18:08:10 回复(0)
在Integer中,-128到127之间,如果两个值相等,则返回true,在这个范围之外则会像String一样创建新的新的内存空间,即新的实例,判断是否相等则会返回false
发表于 2019-11-02 18:15:28 回复(0)
Interger中设置有缓存,范围是 [-128,127],如果落在缓存内,直接返回缓存中的引用,所以只要是范围内的Integer对象,其引用都相同
而范围外的Integer对象,每次都是新 new 出来的,所以为 false
发表于 2019-07-27 15:09:46 回复(0)
缓存池问题
发表于 2022-03-27 23:03:03 回复(0)
Integer类型在-128-->127范围之间是被缓存了的,也就是每个对象的内存地址是相同的,赋值就直接从缓存中取,不会有新的对象产生。 而大于这个范围,将会重新创建一个Integer对象,也就是new一个对象出来,所以地址不相等。
发表于 2021-10-18 23:22:01 回复(0)
Integer类型在-128-->127范围之间是被缓存了的,也就是每个对象的内存地址是相同的,赋值就直接从缓存中取,不会有新的对象产生,而大于这个范围,将会重新创建一个Integer对象,也就是new一个对象出来,当然地址就不同了,也就!=;
发表于 2021-09-17 06:50:46 回复(0)
做了好几遍每次都忘记范围。。。
发表于 2021-09-02 00:04:28 回复(0)