首页 > 试题广场 >

以下程序执行后,错误的结果是() public class

[不定项选择题]
以下程序执行后,错误的结果是()
public class Test {
    private String name = "abc";
    public static void main(String[] args) {
        Test test = new Test();
        Test testB = new Test();
        String result = test.equals(testB) + ",";
        result += test.name.equals(testB.name) + ",";
        result += test.name == testB.name;
        System.out.println(result);
    }
}

  • true,true,true
  • true,false,false
  • false,true,false
  • false,true,true
只能怪自己瞎
发表于 2019-05-21 10:00:56 回复(61)
1、首先应该注意到作为成员变量的 name 是使用字面量直接赋值的 ( privateString name ="abc"; ) 这种赋值的执行过程是先看字符串常量池中有没有 value 数组为 ['a', 'b', 'c'] 的 String 对象,如果没有的话就创建一个,有的话就拿到他的一个引用
2、name 没有被static 修饰,所以每实例化一个对象都会执行 private String name ="abc"; 第一次执行的时候发现字符串常量池没有 value 数组为 ['a', 'b', 'c']的String 对象,所以创建一个,拿到他的一个引用,但是第二次的时候发现已经有了这样的对象了, 所以只是拿到这个拿到这个对象的一个引用而已。
3、执行 test.name == testB.name; 的时候比较的是两个name指向的内存是不是同一个(比较引用本身没有意义),所以 test.name == testB.name; 的结果是true。
发表于 2019-09-06 22:15:58 回复(12)

发表于 2019-11-08 11:47:22 回复(24)
Test 类没有重写equals方法,比较时调用的时object的equals方法,object的equals方法用==比较的时地址值。
发表于 2019-10-21 22:45:24 回复(0)
做做对本题首先要审题仔细,题目需要错误的选项,这种题正确的答案只会有一个,错误的答案也就会有三个.
1.test.equals(testB),两个对象用equals()函数比较,如果两个对象是一个则返回true,如果不是String的实例并且是两个不同的对象则返回false,当两个对象是String的实例时,则比较字符串内容是否相同.相同则返回true, 不相同返回false.
2.test.name.equals(testB.name) 字符串内容相同,返回true.
3.test.name == testB.name, 栈中有一块内存存的是"abc", test.name和testB.name都指向这块内存,所以返回true,更具体还可以看https://blog.csdn.net/chekongfu/article/details/100024724文章当中的介绍.
综上,程序输出是false,true,true. 本题的正确答案则是ABC
发表于 2019-08-27 09:56:04 回复(5)
解析:==比较的是变量的内存中的地址值,equals没有重写的话和==一样,也是比较内存中的地址值。显然Test类没有重写equals方法。语句:private String name = "abc";是在常量池创建"abc"常量,test.name和testB.name指向的都是常量池的"abc"。
发表于 2020-03-20 13:04:35 回复(0)
可能自己的眼睛要来是用来出气儿的
发表于 2019-09-07 14:00:39 回复(0)

代码的输出结果是false,true,true。首先第一个test.equals(testB),由于两个对象不是String类的实例,是一个test类的两个对象,所以new的动作会在堆内存中开辟两块不同的空间用来存放这两个对象,所以使用equals比较这两个对象返回false。其次,test.name.equals(testB.name)比较的是两个字符串,使用equals比较字符串则会比较内容,所以返回true。最后,test.name == testB.name,在这里使用了==来进行比较,需要注意的是两个test对象的name属性指向同一个字符串,也就是同一块内存上的地址,所以使用==比较直接返回true。

发表于 2021-02-21 17:17:01 回复(0)
这个题审题有问题吧,明明只有一个答案,为什么是不定项选择
发表于 2019-08-23 22:10:22 回复(1)
人傻了,一开始还看到要选错误的,往后看着看着就选成正确的了

发表于 2021-04-10 21:20:04 回复(0)
这题 难在选的是错误答案
发表于 2022-06-07 23:29:10 回复(0)
眼瞎
发表于 2022-06-02 23:18:41 回复(0)
第三个看成三个等于了,哭了
发表于 2022-03-08 10:25:54 回复(0)
要注意的是:test和testB进行比较调用的是object的equals方法,而Test里没有重写equals方法,object的equals方法用==比较,此时比较的的地址值,所以返回的是false。选错的来集合,哈哈哈哈
发表于 2022-03-02 09:55:07 回复(0)
我是个瞎子。。。。。避开了所有正确答案。   一库
发表于 2022-03-01 12:39:35 回复(0)
是选错误的不是选对的
发表于 2022-02-14 17:55:01 回复(1)
1.test.equals(testB),两个对象用equals()函数比较,如果两个对象是一个则返回true,如果不是String的实例并且是两个不同的对象则返回false,当两个对象是String的实例时,则比较字符串内容是否相同.相同则返回true, 不相同返回false. 2.test.name.equals(testB.name) 字符串内容相同,返回true. 3.test.name == testB.name, 栈中有一块内存存的是"abc", test.name和testB.name都指向这块内存,所以返回true.综上,程序输出是false,true,true. 本题的正确答案则是ABC
发表于 2021-10-24 10:45:26 回复(0)
Test类没有重写equals方法,默认调用Object中的equals方法,该方法底层就是 ==,比较地址
发表于 2021-09-13 09:51:32 回复(0)
成功的选着了正确的d,看错题伤不起
发表于 2020-05-29 10:57:18 回复(0)
发表于 2020-02-26 13:29:05 回复(0)