首页 > 试题广场 >

下面为true的是?

[单选题]
Integer i = 42; 
Long l = 42l; 
Double d = 42.0; 
下面为true的是
  • (i == l)
  • (i == d)
  • (l == d)
  • i.equals(d)
  • d.equals(l)
  • i.equals(l)
  • l.equals(42L)
推荐
包装类的“==”运算在不遇到算术运算的情况下不会自动拆箱
包装类的equals()方法不处理数据转型
编辑于 2016-04-11 13:09:48 回复(22)

ABC3 个选项很明显,不同类型引用的 == 比较,会出现编译错误,不能比较。

DEF 调用 equals 方法,因为此方法先是比较类型,而 i d l 是不同的类型,所以返回假。

选项 G ,会自动装箱,将 42L 装箱成 Long 类型,所以调用 equals 方法时,类型相同,且值也相同,因此返回真。

发表于 2015-10-08 16:14:07 回复(26)

1、基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;

         int a = 220;

         Integer b = 220;

        System.out.println(a==b);//true
2、两个Integer类型进行“==”比较, 如果其值在-128至127  ,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。

        Integer c=3;
        Integer h=3;
        Integer e=321;
        Integer f=321;
        System.out.println(c==h);//true
        System.out.println(e==f);//false

3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true。

        Integer a=1;
        Integer b=2;
        Integer c=3;
        System.out.println(c.equals(a+b));//true

4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。 

        int i=1;
        int j = 2;
        Integer c=3;
        System.out.println(c.equals(i+j));//true


发表于 2017-02-13 10:25:44 回复(20)
G ,A、B、C肯定不选,都是基本类型的包装类,比较的是引用,涉及到类型的转换:
byte,short,char>int>long>float>double,小类型自动转换为大类型
发表于 2015-07-10 17:47:05 回复(0)
==对于基本数据类型的比较是比较值,对于引用数据类型则是比较两个引用是否指向相同的内存地址。值得注意的是:==比较引用类型时,如果引用类型的类型不同,那结果一定是false。 equals()方法比较的是两个对象的值或者地址是否相等,但可以在类中进行重写,比如string类,重写后,先判断是否是自己,然后判断是否是string类,最后判断值是否相等.
发表于 2023-06-05 20:30:27 回复(0)

equals方法只有对象才有,所以使用equals必须先包装


发表于 2019-01-24 23:51:07 回复(0)
equals先比较类型,再比较大小。
发表于 2018-10-12 16:34:34 回复(0)
发表于 2017-04-08 15:38:12 回复(0)
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}

Float和Double和Integer还有Long类似,但是Float和Double较为复杂,特别Float看不懂。所以不是一个类型的,equals直接返回false。
而==如果是同一个类型,会自动拆箱。l.equals(42L),这里是42L自动装箱成Long类型,而不是l被自己拆箱了。

另外好像基本数据类型的==不是比较地址,摘自别人的博客。
java中的数据类型,可分为两类: 
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 
他们之间的比较,应用双等号(==),比较的是他们的值。 
2.复合数据类型(类) 
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。 
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
编辑于 2016-09-17 16:45:09 回复(0)
选G
A B C是比较引用(因为是引用类型之间的比较),42  42l  42.0是在栈中的不同物理位置,所以 ABC 引用不相同。
DEFG是equals比较,
先比较引用,相同直接返回true,不同的话再比较类型,最后比较其实际值是否相同。
编辑于 2015-10-08 20:01:24 回复(0)
public static void main(String[] args) {
    Integer i = 42;
    System.out.println(i.equals(42L));
}

这段代码主函数在jdk1.7环境下输出为false,求解释
发表于 2015-07-22 20:48:02 回复(2)
看类中对equals重写的源码:会先用instanceof比较是否属于该类,如果不属于,直接返回false~
发表于 2016-02-18 15:56:10 回复(6)
本题考点:1、对于Reference Type的变量来说==比较的是地址,equals比较的是value。 2、==是在同一类型的基本类与包装类之间才会发生自动拆包比较,equals不会对比较的数据类型进行转换
发表于 2016-08-19 09:52:10 回复(0)
答案是G
A、B、C 用==比较的是对象的地址,返回false
D、E、F 中比较的两个对象的类型不同,返回false
发表于 2015-07-23 16:20:20 回复(5)
ABC用==编译不通过,两边类型需一致。
equals,看源码,a.equals(b),首先看b instanceof a,所以不同类型的肯定是false,这里不是类型包含。
发表于 2016-08-16 15:56:59 回复(1)
ABC肯定不对,三个对象,三个地址,不相等。
包装类的equals都重写了,我们拿Integer来说:
public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
其他几个包装类也都一样,可以看到,只要类型不同,肯定返回false,类型相同,才会判断值。
发表于 2016-07-10 17:57:14 回复(0)
public class test  {
	public static void main(String[] args) {
		Integer i = 42;
		Long l = 42l;
		Double d = 42.0;
//		System.out.println(i == l);
//		System.out.println(i == d);
//		System.out.println(l == d);
		System.out.println(i.equals(d));
		System.out.println(d.equals(l));
		System.out.println(i.equals(l));
		System.out.println(l.equals(42L));
	}
}

false
false
false
true

发表于 2015-08-12 20:41:39 回复(2)
==
    两边都是包装类
            类型相同  
            类型不同   编译错误
     一边是包装类,一边是基本数据类型
            自动拆箱(即使是不同的数据类型,也会自动拆箱)
equals
        参数是基本数据类型,自动装箱成为包装数据类型
        参数是不同的包装类型,先比较类型,输出false
        
    

发表于 2021-09-08 11:20:50 回复(1)
包装类的equals()方法不处理数据转型
发表于 2021-08-18 19:52:28 回复(0)
同类型的进行比较,如Integer 与int,Long与long进行==比较时,会自动拆箱;不同类型之间进行比较,如果有一方为非包装类,则会自动拆箱。如果两方都为包装类,则不会拆箱,且不能比较,编译会报错。
发表于 2019-06-03 19:58:49 回复(0)
我前几天面试竟然被问到了这个问题,做了个总结。分享给牛油们
发表于 2018-05-09 16:04:39 回复(2)