首页 > 试题广场 >

根据下面的程序代码,哪些选项的值返回true?

[单选题]
根据下面的程序代码,哪些选项的值返回true?
public class Square {  
    long width;  
    public Square(long l) {   
        width = l;  
    }  
    public static void main(String arg[]) {   
        Square a, b, c;   
        a = new Square(42L);   
        b = new Square(42L);   
        c = b;   
        long s = 42L;  
    } 
}

  • a == b
  • s == a
  • b == c
  • a.equals(s)
推荐
答案:C
 a = new Square(42L);   
 b = new Square(42L);   
这里new了两个对象,所以a,b不是同一个引用a!=b
s的类型跟a,b不同类型,所以s!=a,s!=b
 c = b; 
这里b,c是同一个对象的引用,所以b==c是true
编辑于 2015-01-10 21:39:29 回复(1)
这题考的是引用和内存。
//声明了3个Square类型的变量a, b, c
//在stack中分配3个内存,名字为a, b, c
Square a, b, c; 
//在heap中分配了一块新内存,里边包含自己的成员变量width值为48L,然后stack中的a指向这块内存
a = new Square(42L); 
//在heap中分配了一块新内存,其中包含自己的成员变量width值为48L,然后stack中的b指向这块内存
b = new Square(42L);   
//stack中的c也指向b所指向的内存
c = b;
//在stack中分配了一块内存,值为42
long s = 42L; 
如图所示:

来看4个选项:
A: a == b
由图可以看出a和b指向的不是同一个引用,故A错
B:s == a
一个Square类型不能与一个long型比较,编译就错误,故B错
c:b == c
由图可以看出b和c指向的是同一个引用,故C正确
d:a equal s
程序会把s封装成一个Long类型,由于Square没有重写Object的equals方法, 所以调用的是Object类的equals方法,源码如下
 public boolean equals(Object obj) {
     return (this == obj);
 }
其实就是判断两个引用是否相等,故D也错误。



编辑于 2015-04-09 17:02:51 回复(63)
发表于 2016-07-12 22:29:57 回复(1)
这有点蒙
发表于 2022-02-07 18:29:59 回复(0)
new出来的是对象,是引用
发表于 2021-05-21 08:22:05 回复(0)
这是java的基础了,弄懂“==”是指引用就够了

发表于 2016-03-10 15:28:54 回复(2)
只有在String类中,equals()方法返回的才是对象的内容的比较。
发表于 2017-03-01 22:14:03 回复(4)
先看类型 基本数据类型只能与基本数据类型相比较, 引用类型只能与引用类型比较, 如果是基本数据类型则比较值, 如果是引用类型比较地址, String特殊,==和equls都true
发表于 2016-09-16 22:14:36 回复(4)
总结来说: 1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; 如果作用于引用类型的变量,则比较的是所指向的对象的地址 2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址; 诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。 这题考的是引用和内存。 //声明了3个Square类型的变量a, b, c //在stack中分配3个内存,名字为a, b, c Square a, b, c;  //在heap中分配了一块新内存,里边包含自己的成员变量width值为48L,然后stack中的a指向这块内存 a = new Square(42L); //在heap中分配了一块新内存,其中包含自己的成员变量width值为48L,然后stack中的b指向这块内存 b = new Square(42L);    //stack中的c也指向b所指向的内存 c = b; //在stack中分配了一块内存,值为42 long s = 42L;  如图所示:  来看4个选项: A: a == b 由图可以看出a和b指向的不是同一个引用,故A错 B:s == a 一个Square类型不能与一个long型比较,编译就错误,故B错 c:b == c 由图可以看出b和c指向的是同一个引用,故C正确 d:a equal s 程序会把s封装成一个Long类型,由于Square没有重写Object的equals方法, 所以调用的是Object类的equals方法,源码如下  public boolean equals(Object obj) {   return (this == obj);  }其实就是判断两个引用是否相等,故D也错误。
编辑于 2017-09-13 08:11:51 回复(0)

总结来说:

1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

如果作用于引用类型的变量,则比较的是所指向的对象的地址

2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

发表于 2017-08-17 22:14:51 回复(0)
==:
    基本类型:比较的是值是否相等
    引用类型:比较的是地址值是否相同
equals:
    用于比较引用类型,默认比较的是地址值是否相同
    
发表于 2020-04-22 18:34:09 回复(1)
1
2
3
4
5
6
7
8
9
10
11
12
这题考的是引用和内存。
//声明了3个Square类型的变量a, b, c
//在stack中分配3个内存,名字为a, b, c
Square a, b, c; 
//在heap中分配了一块新内存,里边包含自己的成员变量width值为48L,然后stack中的a指向这块内存
a = newSquare(42L);
//在heap中分配了一块新内存,其中包含自己的成员变量width值为48L,然后stack中的b指向这块内存
b = newSquare(42L);   
//stack中的c也指向b所指向的内存
c = b;
//在stack中分配了一块内存,值为42
longs = 42L; 
如图所示:
 
来看4个选项:
A: a == b
由图可以看出a和b指向的不是同一个引用,故A错
B:s == a
一个Square类型不能与一个long型比较,编译就错误,故B错
c:b == c
由图可以看出b和c指向的是同一个引用,故C正确
d:a equal s
程序会把s封装成一个Long类型,由于Square没有重写Object的equals方法, 所以调用的是Object类的equals方法,源码如下
1
2
3
 publicbooleanequals(Object obj) {
     return(this== obj);
 }
其实就是判断两个引用是否相等,故D也错误。


发表于 2017-11-06 20:51:29 回复(0)
  对于非String、Date、Integer类型equals比较的是引用类型变量指向的地址
   对于String、Date、Integer类型equals比较的是值
  故D不对
编辑于 2021-08-03 14:57:13 回复(0)
s与a的类型不同,编译的时候“s==a”就不通过。
a,b分别指向不同的存储地址;b直接赋值给c,所引用的是同一地址的内容;s及他的参数都在栈里的局部变量表中,a的存在堆中

发表于 2016-08-19 16:42:04 回复(0)
hashcode
发表于 2014-11-08 07:41:37 回复(0)
  • 对象直接使用==时,比较的是地址,而不是地址对应的内存里面存储的数据;
  • Square类没有重写父类Object的equals方法,故采用父类的equals判断,也是比较地址。
  • 调用equals时,会将long类型的s转换其包装类Long类型;
发表于 2022-04-09 16:21:02 回复(0)
发表于 2022-02-18 21:33:46 回复(0)
equals()没重写
发表于 2022-01-21 20:27:12 回复(0)
s是一个long类型的变量,而a,b,c都是Square类型的变量。所以D选项不对
发表于 2022-01-07 09:09:01 回复(0)
这个a是Square类型,不是Long类型
发表于 2018-03-21 11:28:30 回复(0)
没有重写equlas方法 使用的是object的equlas方法
发表于 2019-06-05 22:59:51 回复(0)