首页 > 试题广场 >

以下程序段的输出结果为: public

[单选题]
以下程序段的输出结果为:
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);
    }
}

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

!=就返回true
所以
答案:B
编辑于 2015-01-08 17:58:49 回复(11)
使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介于-128至127直接时,作为基本类型。
使用Integer a = new Integer(1); 时,无论值是多少,都作为对象。

发表于 2015-08-31 15:53:00 回复(28)
有些人说的看源码选C,这里有个误区所谓的缓存,是在使用valueOf的时候使用的,
Integer n3 = Integer.valueOf(47)
Integer n4 = Integer.valueOf(47);
这里的n3==n4才是true。
如果直接使用new一个对象,从构造函数来看:
    public Integer(int value) {
        this.value = value;
    }
就是完全不同的两个对象,没有使用所谓的缓存。

发表于 2015-07-28 21:27:48 回复(7)
话不多说,整型的几种比较。
发表于 2017-11-21 10:33:42 回复(8)
使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介于-128至127直接时,作为基本类型。
使用Integer a = new Integer(1); 时,无论值是多少,都作为对象。
所以,因为这里两个都是new出来的,所以比较的是对象
而==对于对象来说,比较的是地址,所以当然不同咯
发表于 2016-05-03 19:47:57 回复(2)

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

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

发表于 2018-03-04 09:59:19 回复(0)
Integer n1 = 47;
Integer n2 = 47;
System.out.print(n1 == n2);
System.out.print(",");
System.out.println(n1 != n2);
//output:true,false
Integer n3 = Integer.valueOf(47);
Integer n4 = Integer.valueOf(47);
System.out.print(n3 == n4);
System.out.print(",");
System.out.println(n3 != n4);
//output:true,false

发表于 2016-07-18 07:49:13 回复(2)
这不应该选c吗?在-128至127间的整数都存放于常量池。
发表于 2015-07-12 04:01:11 回复(0)
使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介于-128至127直接时,作为基本类型。
使用Integer a = new Integer(1); 时,无论值是多少,都作为对象。
所以,因为这里两个都是new出来的,所以比较的是对象
而==对于对象来说,比较的是地址,所以当然不同咯
发表于 2016-05-03 19:47:57 回复(0)
答案:B
Java中==比较的是引用是否是同一个对象
两个integer对象都用new创建,因此是两个不同的对象
所有==返回false , !=返回true
发表于 2015-01-29 10:44:58 回复(0)
B
发表于 2015-01-09 10:29:20 回复(0)
public static void main(String[] args) {
    //Integer 通过new创建
    Integer n1=new Integer(127);
    Integer n2=new Integer(127);
    System.out.println("通过new方式创建值为:"+(n1==n2));
    //直接赋值在-128~127之间
    Integer n3=127;
    Integer n4=127;
    System.out.println("直接赋值在-128到127之间:"+(n3==n4));
    //使用ValueOf与直接赋值的对比(未超出)
    Integer n5=Integer.valueOf(127);
    System.out.println("使用ValueOf与直接赋值的对比"+(n4==n5));
    //超出-128~127的值比较
    Integer n6=128;
    Integer n7=128;
    System.out.println("赋值超出128为:"+(n6==n7));
    //使用ValueOf与直接赋值的对比(超出)
    int n8=Integer.valueOf(128);
    System.out.println("使用ValueOf与直接赋值的对比"+(n8==n7));
}

运行结果

发表于 2022-06-23 15:20:04 回复(0)
这里还是出现的了知识的混肴记忆,就是Interge会初始化存储-128到127之间数字放在元空间,当取值时候,直接取他们地址即可,但是这里不是取值,而是用了new,所以就是在堆中创建了一个对象,然后对象存储了元空间中对应数据的地址
此时用==而不是=,不存在拆箱考虑,比较的是堆中的对象,故地址是不同的
发表于 2020-03-26 23:32:56 回复(0)

如果改成

Integer i1=47;

Integer i2=47;

就是true了

发表于 2020-02-21 01:45:55 回复(0)
看过源码的都知道这个题目选c.不解释。
编辑于 2015-07-19 12:33:20 回复(2)
B == 比较的是引用地址
发表于 2015-03-06 15:45:31 回复(0)
==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
发表于 2019-09-10 20:01:16 回复(0)
直接创建对象,不会判断数值是否在-128<= x<=127

发表于 2022-05-12 18:01:01 回复(0)
new了两个对象,开辟了两个内存,两个内存比较肯定不相等,但是如果赋予基本类型给包装类,两个包装类的地址都是基本类型,就相等了
发表于 2022-05-11 15:03:31 回复(0)
  1. ”==“可以用于原始值进行比较,也可以用于对象进行比较,当用于对象与对象之间比较时,比较的不是对象代表的值,而是检查两个对象是否是同一对象,这个比较过程中没有自动装箱发生。进行对象值比较不应该使用”==“,而应该使用对象对应的 equals 方法。

  2. equals方法在Integer和String这些类中被重写,变成先比较类型,再比较值,而不是比较地址。在用户自定义的类中,没有重写equals方法时,使用的是Object类的equals方法,里面比较的是对象的地址。

发表于 2021-01-24 11:47:37 回复(0)
new出了两块地址,所以B
发表于 2018-04-09 15:29:05 回复(0)