首页 > 试题广场 >

Given the following class,Whic

[单选题]
Given the following class:
public class Cat
{
    long length;
    public Cat(long l)
    {
        length = 1;
    }
    public static void main(String arg[])
    {
        Cat c1, c2, c3;
        c1 = new Cat(10L);
        c2 = new Cat(10L);
        c3 = c2;
        long m = 21L;
    }
}
Which expression returns true?
  • c1==c2;
  • c2==c3;
  • m==c1;
  • c1.equals(m).
推荐
答案:B
 c1 = new Cat(10L);
 c2 = new Cat(10L);
A ,c1和c2是两个参数相同的不同对象,c1!=c2,返回false
B ,c2和c3指向同一个引用,所以c2==c3,返回true
C, m与c1是不同类型,不相等,返回false
D,c1没有定义equals方法,默认调用Object类的equals方法,返回false


编辑于 2015-02-04 18:02:22 回复(3)
B
new关键字生成的对象存在堆内存中,c1和c2指向的是不同的对象,==判断两个变量是否相等,若为基本类型,且都是数值类型返回true,引用类型则必须指向同一个对象才会返回true,故c1和从c2不相等;
c2直接赋值给c3,二者指向的是同一个堆内对象,故二者相等
m为基本类型,c1为对象,二者不相等;

编辑于 2015-01-17 17:04:27 回复(0)
D选项中没有重写equals所以继承的是object中的equals方法,比较的是地址
发表于 2016-02-27 10:44:24 回复(0)
c1和c2是两个不同的对象,存放在堆内存中。c2和c3是指向同一个对象的引用,m是基本类型而c1是引用类型,因此两者不相同。如果编写的类希望能够比较该类创建的两个实例对象的内容是相同的,那么必须覆盖equals()方法,开发者自己决定在什么情况下即可认为对象内容是相同的。字符串类型的对象,本身就重写了equals()方法,因此比较时可以直接用。而本题中Cat类没有覆盖equals()方法,使用的是默认的equals()方法,比较的是两个变量指向的对象是否是同一个对象,即对象的地址是否相同。所以D选项是错误的!
编辑于 2017-01-16 20:24:58 回复(0)
一般地,==表示比较的是引用的地址,equals比较的是内容。
 c1 = new Cat(10L);        //开辟一个对象空间和内容
 c2 = new Cat(10L);        //有开辟一个不同地址的空间
A)c1和c2是两个参数相同的不同对象,c1!=c2,注意==两边为两个类(或包装类)对象时,可以简单理解为比较的是引用的地址,所以返回false
B)c2和c3指向同一个引用(地址空间),所以c2==c3,返回true
C)m时long(基本数据类型),c1是类对象(引用数据类型),m与c1是不同类型,不相等,返回false
D)c1没有定义equals方法,默认调用Object类的equals方法,返回false

发表于 2018-04-02 21:45:52 回复(0)
c3 = c2,表明c2和c3是同一个引用,所以 c2==c3必定为真
发表于 2016-09-25 21:29:36 回复(0)
眼瞎的我
发表于 2019-09-25 17:58:43 回复(0)
c3=c2指向同一块地址
发表于 2019-05-04 08:32:26 回复(0)
地址和值相同才能用==
发表于 2019-05-03 19:38:59 回复(0)
new 创建新的堆内存空间,c1和c2是指向不同的对象,若是基本类型数据,并且值相同可以返回true,或者是c1,c2指向同一个对象,也可以返回true
发表于 2018-09-06 15:53:32 回复(0)
obj.eqs比较的是地址
发表于 2018-06-05 17:46:34 回复(0)
c1和c2是两个不同的对象,地址不同,所以不相等, 将c2赋给c3,所以c2c3的地址相同,则c2==c3 因为equals没有重写所以比较的还是地址,所以不想等
发表于 2018-05-31 11:55:10 回复(0)
c2和c3指向同一个对象,所以引用里面存的地址是相同的。
发表于 2017-07-24 22:12:09 回复(0)
由于Cat没有覆盖equals所以调用Object的equals方法,Object类的equals方法实现对象上擦汗别可能性最大的相等关系;即,对于任何非空引用值x和y,当且仅当x和y引用同一个对象时,此方法才返回true(x==y具有值true)
编辑于 2016-06-30 13:53:32 回复(0)
堆内存里的对象有多个引用,C3=C2,实际上就是把C2变量保存的地址值赋给C3变量,指向堆里面同一个对象
发表于 2015-10-26 09:54:24 回复(0)
B
对象之间的复制是引用复制,所以c2与c3指向相同的对象。
发表于 2015-01-01 23:24:52 回复(0)