首页 > 试题广场 >

假设有以下代码,选项中返回false的语句是?

[单选题]
假设有以下代码
String s=”hello”;
String t=”hello”;
char c[] ={‘h’,’e’,’l’,’l’,’o’}; 
下列选项中返回false的语句是:
  • s.equals(t);
  • t.equals(c);
  • s==t;
  • t.equals(new String(“hello”));
推荐
B,文中的char c[]是数组
编辑于 2015-02-05 15:28:21 回复(2)
B.
==是比较地址值是否相等,.equals()方法是比较值是否相等
s和t两个变量都是指向字符串常量池中的同一个内存区域,所以地址值相等,值当然也相等,AC正确
Char c[]是一个字符数组,和字符串t使用.equals()方法比较,返回false
D选项new了一个新的字符串,它的值和s、t是相同的,但是由于是新new出来的,就会重新开辟一个空间进行存储,所以地址不同,但是值相同

发表于 2015-08-26 16:00:06 回复(8)
String s=”hello”;//首先会在字符串缓冲区找找有没有hello,结果没有找到,就创建了一个hello,然后引用是s
String t=”hello”;//会在字符串缓冲区找hello,结果找到了,就返回了引用,也就是s;所以这句话等同于t=s;所以两个引用一样;所以t==s是true
Char c[] ={‘h’,’e’,’l’,’l’,o’’};//这就是一个数组,而且数组在堆上
equlse函数可以看源码!比较值相等之前会先比较类型是不是一样;如果类型一样才会比较值;如果类型不一致就直接return false;
所以综上所述:ACD返回true Bfalse
发表于 2017-04-19 15:31:55 回复(2)
答案:B
字符串的equals方法是比较两个字符串是否相等的方法
如果两个对象不是同一类型,返回false,
B选项字符串与字符数组不是同一类型,返回false
发表于 2015-01-15 17:10:28 回复(0)
    String s = "hello";
    String t = "hello";
    char c [ ] = {'h','e','1','1','o'};
    System.out.println(s.equals (t)); //true  s和t指向内存常量区的同一个字符串  ;
    System.out.println(t.equals (c));//false 一个返回字符串,一个返回对象 ;
    System.out.println(s==t);// true  s和t指向内存常量区的同一个字符串 ;
    System.out.println(t.equals (new String ("hello")));//true equal用于比较两个对象的值是否相同,和内存地址无关


发表于 2015-10-02 10:12:16 回复(0)
String重写了equals方法,有三种情况
  • 比较对象与当前对象是同一个对象(Object中的equals方法),返回true;
  • 传入的对象是String类型,比较两个字符串长度,不同返回false,若长度相同,则对每一位字符进行比较,每一位都相同返回true;
  • 传入的对象不是String类型,直接返回false。
编辑于 2018-04-20 16:36:42 回复(0)
发表于 2017-05-05 11:15:02 回复(0)
1、equals比较的是内容,只要内容相同就返回true
2、使用==时比较的是地址,只要有new,就会开辟一个新的地址,所以两个new的对象即使内容相同地址也不会相同,自然返回false
3、为什么C是正确的?
     答:创建s的时候首先会去字符串常量池去寻找“hello",没有,就开辟一个内存区域,
            当创建t的时候也会去去字符串常量池去寻找”hello“,发现已经有了,就不再开辟内存区域,而是和s的地址是一个了
      我是简单理解成字符串常量池就是一块公共区域,这里面有的就可以使用,没有的再新加
发表于 2018-03-04 21:23:46 回复(0)
答案:B
以非new形式创建一个字符串str,首先会在常量池里查找这个字符串是否存在,如果存在就会把这个已存在的字符串的地址和值赋给str,反之就会重新开辟一个空间来进行存储。所以s和t是同一对象,A、C返回true。以new的形式创建一个字符串会重新开辟一个空间来存储,所以和t的地址不同,但是两者的值都是“hello”,故D返回true。而B选项中t.equals(c)比较的是两者的值,t是一个字符串,c是一个字符数组,故返回false。
发表于 2017-07-04 16:07:07 回复(0)
==和equal的区别是,==比较的,如果是数值类型,值相等就像等,如果是引用类型,则比较的是地址,只有两个引用的地址相同,才相等 equal比较的是地址里存放的值是否相等
发表于 2015-07-25 10:11:11 回复(0)
String类的equals是进行了重写 了的
发表于 2017-04-17 09:34:17 回复(0)
String.equals()源代码:
public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
发表于 2016-09-13 22:36:04 回复(1)
t.equals(c);

Incompatible conditional operand types char[] and String
进行equals()方法时候,类型不相容,返回false
发表于 2016-01-31 22:03:53 回复(0)
B
字符串是一个对象,字符数组是基本类型,这两个的数据类型不同,返回false
发表于 2015-09-04 13:51:37 回复(0)
B
==判断两个变量是否相等,若为基本类型,且都是数值类型返回true,引用类型则必须指向同一个对象才会返回true,String s=”hello”; String t=”hello”定义的字符串位于常量池中,属于指向同一个引用;
equals方法,String类进行重写,只要两个字符串所包含的字符序列相同,通过equal返回true

发表于 2015-01-17 16:49:46 回复(0)
A.因为String存在常量池优化,没有通过new 出来的String,是直接从接常量池中取出,而equals是进行的内容比较,所以为true.
C.因为都是从常量池中取出的同一对象,所以地址相同,所以为true
D.new String()的String将会在堆内存和常量池中都创建内容相同的String对象,而常量池中已经存在则不进程创建,而equals是进行的内容比较,所以为true

B.String与char[] 进行比较,下面是String中equals()方法源码
 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }
在这其中instanceof关键是判断anObject是否String 的子类或实现类
而char[] 不是String的子类与实现类
所以为false
发表于 2019-09-03 08:58:59 回复(0)
答案 B  虽然String 底层是char数组实现的 , 但 equals先比类型  类型不同返回false 类型相同再比较内容
发表于 2019-08-23 20:56:04 回复(0)

==等值比较:比的地址比较浅显的比较,比的是第一眼,所以对于基本类型内容相同结果就是true;如果比的是引用类型,即使同类型,同样的值,但是存放在堆内存中的地址不同,结果将会是false

equals比较:比较引用类型更合适,其比较的是对象的类型和其中的内容。

u  equals的结果为true,那么两者的hashcode必相同,但是hashcode相同,equals结果不一定相同。

u  equals只能比较引用类型,不能比较基本类型。

u  注意:equals方法的调用,变量必须要开辟空间,如果为变量null会造成空指针异常。

发表于 2019-07-30 22:24:00 回复(0)
为什么s==t的结果是true 
而“ ”+s==t的结果是false
发表于 2019-06-04 20:36:56 回复(0)
equals要先比较类型是否相同,再比较值,c为一个数组对象,显然和t类型不同,故返回false
发表于 2019-04-17 15:55:21 回复(0)
存储位置
发表于 2019-04-14 18:02:41 回复(0)