首页 > 试题广场 > 若有下列定义,下列哪个表达式返回false?
[单选题]

若有下列定义,下列哪个表达式返回false?

String s = "hello";

String t = "hello";

char c[] = {'h','e','l','l','o'} ;

  • s.equals(t);
  • t.equals(c);
  • s==t;
  • t.equals(new String("hello"));

7个回答

添加回答
推荐

答案是:B

Java又不是C++,什么时候字符数组等于字符串了(对这句话我不负责任)?

而常量池中的字符串,只有变量名不同是可以用双等号判断是否相等的,内存都是常量池中的字符串。

但是new出来的字符串,只能用equals,用双等号是不相等的,因为是两个内存对象。

public class HelloWorld {
    public static void main(String []args) {
        String s = "hello";
        String t = "hello";
        char c[] = {'h','e','l','l','o'} ;
        System.out.println(s.equals(t));
        //c++中定义的东西,不要在java中混为一谈。(对这句话我不负责任)
        System.out.println(t.equals(c));
        System.out.println(s==t);
        System.out.println(t.equals(new String("hello")));
        //这个不相等,因为语句中new的字符串不在常量池,是在堆
        System.out.println(t==new String("hello"));
        //这样可以判断字符数组与字符串是否包含同样的字符序列
        System.out.println(t.equals(new String(c)));
    }
}
编辑于 2019-04-25 14:50:41 回复(1)
选B。
A、D选项是对字符串内容的比较。JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池。代码中出现字面量形式创建字符串对象时,JVM首先会对这个字面量进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回,否则新的字符串对象被创建,然后将这个引用放入字符串常量池,并返回该引用。所以返回true。
C选项是引用地址的比较,同上也属于常量池的同一个字符串地址,所以相等返回true。

编辑于 2019-04-24 16:33:56 回复(0)
String 对equals()方法进行重写,所以这题中A、C、D内容都是"hello",所以A、C、D都正确,就只有选B了
发表于 2019-04-25 11:28:18 回复(0)
B   string 对equals重写了   equals比较的是内容   ==比较的是指向的是否是同一对象

编辑于 2017-06-09 21:42:41 回复(0)
AC参考常量池。D重写了方法并且new的对象会在常量池中找,如果有就指向了。 综合选B。
发表于 2017-07-09 12:52:44 回复(1)
C
发表于 2017-06-09 14:41:49 回复(0)
有一个没有答案的,,是B吗?
发表于 2017-06-07 20:10:08 回复(0)