看看这个小程序 怎么编译通过运行错误

2025-12-15 15:36:02
推荐回答(6个)
回答1:

equals()方法 你少个s
得出的结果两个都是true
原因是 String类中equals方法是比较2个字符串值是否相同 显然相同
在JAVA虚拟机的堆中存在一个池 是专门放直接赋值的字符串的
在直接复制时先在堆中找是否有该字符串如果没有就创建一个如果
有就直接把引用指向它 你的代码是2个引用都是直接赋值的所以
第2个会指向池中第一个赋值时创建的字符串 2个引用指向的是
同样同一个对象所以用“==”判断时返回的是true。

回答2:

class TEST
{

public static void main( String args[]) throws Exception
{

String str1="abc";
String str2="abc";
System.out.print(str1.equals(str2));
System.out.print(str1==str2);

}
现在可以运行了~

回答3:

Object 中的equals被String类重写了,是挨个字符比较的。所以都是true.
== 比较的是内存的地址,而equals是调用此类的equals方法,具体是怎么比的,那要看具体的equals是怎么写得的。

附上String 的equals源码
public boolean equals(Object obj)
{
if(this == obj)
return true;
if(obj instanceof String)
{
String s = (String)obj;
int i = count;
if(i == s.count)
{
char ac[] = value;
char ac1[] = s.value;
int j = offset;
int k = s.offset;
while(i-- != 0)
if(ac[j++] != ac1[k++])
return false;
return true;
}
}
return false;
}

回答4:

两个错误:一是equals你少写个s。
二是结尾你少写了一个大括号。

囧囧!

回答5:

str1.equals(str2)
得到的结果应该是 true 和false
第一个 比较的是他们的值
第二个比较的是他们的对象,是两个不同的对象,,永远是false

回答6:

看来这么多人回答了!简单得问题大家都这么积极,哈哈