java下列代码的执行结果是

来源:百度知道 编辑:UC知道 时间:2024/07/08 14:34:29
下列代码的执行结果是:
public class Test5{
public class Test5{
public static void main(String args[]){
String s1=new String("hello");
String s2=new String("hello");
System.out.print(s1==s2);
System.out.print(",");
System.out.println(s1.equals(s2));
} }

false,true

是不是应该直接报个错啊~
既然是java 语言,两个字符串之间能用双等号“==”??

再说了,看看最上面两行~
public class Test5{
public class Test5{

这样用是代表需要使用构造函数么?就算使用构造函数,起码大括号需要配上对吧?

路过~拙见~

原代码有问题.改成如下代码后:
public class Test5{

public static void main(String args[]){
String s1=new String("hello");
String s2=new String("hello");
System.out.print(s1==s2);
System.out.print(",");
System.out.println(s1.equals(s2));
}
}

结果为:
false,true

false,true
解释
==是比较两个对象的内存地址
因为是new了两个对象所以内存地址是不一样的
equals是比较两个对象的内容
都是hello所以是一样的

false,true
第一个为false是因为”==“比较的是两个应用,他们在内存中的地址不一样,所以为false
第二个为true 是因为String类里重写了equals方法,只要两个对象的内容一样,就返回true

嗯,原代码有问题,答案是false ,true,==比较的是两个String对象的hashcode,它们是不相等的,equals比较的是String字符串的内容,在你的程序中它们是相等的,呵呵