首页 > 试题广场 >

请问以上程序执行的结果是

[单选题]
有这么一段程序:
public class Test{ 
    public String name="abc"; 
    public static void main(String[] args){ 
        Test test=new Test(); 
        Test testB=new Test(); 
        System.out.println(test.equals(testB)+","+test.name.equals(testB.name)); 
    } 
}
请问以上程序执行的结果是()
  • true,true
  • true,false
  • false,true
  • false,false
yql头像 yql
 public boolean equals(Object obj) {
        return (this == obj);
    }

Object 中euqals的源码如上。没有重写equals时,是直接用==判断的,而String中重写了equals方法。
编辑于 2015-09-17 09:39:34 回复(9)
equals没重写时候和==一样,比较的是对象的地址,题中new 了两个对象,所以各自地址不一样,使用equals比较为false,但是string类型中的equals方法Java默认重写了,可以比较对象里的值;两个对象指向的同一个string成员变量里的值相同,所以eqauals比较也相同。
发表于 2016-05-12 08:58:49 回复(2)
euqals和==都比较的是地址。只有String的equals重写了,比较内容。
发表于 2016-08-10 22:21:17 回复(3)
基本数据类型使用==和!=
==和!=比较的是对象的引用
equals()默认行为是比较引用,任意类都继承Object,默认的equals()比较的是引用,所以test.equals(testB)返回值为false
test.name.equals(testB.name) publicString name="abc";  所以实际上是String比较,返回值是true

发表于 2015-10-07 21:03:51 回复(2)
首先 “test.name.equals(testB.name)" 这里不管是equal还是“==” ,返回的都是true
 equals好理解,String类重写的equals先用“==”判断地址是否相同,不行再将String拆成单个char字符一个个比较
 至于用   test.name.equals(testB.name)"用   “( test.name==testB.name)"也返回true,是String不用new创建时,会先找String池中有没有这个“abc”,值一样的话 ,有就直接拿它的引用地址返回给String,而不去创建新的String
发表于 2016-04-13 10:32:34 回复(2)
1. 对象存储在堆中,不同的对象地址不一样,所以第一个为false。
2. 字符串存储在堆中的常量区,对于一个新的String,如果常量区中已经有相同的值存在,则不创建新的对象,直接创建此对象的引用,所以第二个为true。

参考:http://blog.csdn.net/zxd861114/article/details/5128753
发表于 2015-09-25 09:58:14 回复(0)
==  比较的是两个对象的地址是否相同
equals 比较的是两个对象的内容是否相同

==比较的是对象的地址,也就是是否是同一个对象;

equal比较的是对象的值。


凡是new出来的就是对象
凡是new出来的就是不同的对象,无论它们长的多么相似
凡是new出来的都有自己的内存空间

发表于 2016-12-13 11:16:01 回复(0)
Java中equals与==是相同的 所以比较的是内存地址 因为两个类都是new出来在栈里面分配不同的地址所以是flase,但是String是一个方法里面的所以为true
发表于 2015-10-27 16:16:42 回复(4)
选C,new的是不同的地址内存,test.name.equals(testB.name)比的是内容,
发表于 2016-05-23 17:35:20 回复(0)
new出来,分配的内存区不一样,地址不一样,不相等。但是取属性值.name是一样的。
发表于 2015-09-17 00:27:57 回复(0)
object调用equals(),若没有重写equals(),比较对象的地址;若重写,看具体重写方法;
而String默认重写了equals(),比较它们值.
编辑于 2019-04-01 16:42:32 回复(0)
前一个比较的是对象的地址值,new了两个对象地址值肯定不同,故为false;
后一个由于String类重写了Object类中的equals方法,比较的是两个String的内容,故为true。
发表于 2019-03-03 19:53:40 回复(0)

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

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

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

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

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

发表于 2019-02-21 09:52:17 回复(0)
public boolean equals(Object obj) {
        return (this == obj);
    }

Object 中euqals的源码如上。没有重写equals时,是直接用==判断的,而String中重写了equals方法。
所以,test.equals(testB)就相当于test == testB,比较的是引用的地址,返回false。而test.name.equals(testB.name)中的test.name是String类型,String类型重写了equals方法,比较的是字符串的内容,而不是引用的地址,所以所返回true。
发表于 2018-04-15 19:12:14 回复(0)
Object 中euqals的源码如上。没有重写equals时,是直接用==判断的,而String中重写了equals方法。
发表于 2015-10-02 16:52:04 回复(0)
Test没有重写equals方法,所以直接调用父类Object的equals方法:
publicbooleanequals(Object obj) {
        return(this== obj);
    }
所以题目最终又回到了老生常谈的话题:
==比较的是地址。
发表于 2016-07-12 11:11:03 回复(0)
string中重写了equals方法,所以比较的是内存地址!
发表于 2020-03-18 09:45:14 回复(0)
第一个equals比较两对象地址,为false 第二个equals比较对象属性值,都为null
发表于 2019-07-31 23:55:15 回复(0)
没有重写object的equals方法,也底层还是==运算,则比较地址 string默认重写该方法,比较内容
发表于 2019-07-25 12:22:44 回复(0)
Object 中的equals比较的是两个对象的地址,而String中的equals重写了Object中的equals方法,比较的是内容

发表于 2019-06-26 14:17:07 回复(0)