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

来源:百度知道 编辑:UC知道 时间:2024/06/22 20:43:01
class TEST
{

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

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

}

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

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);

}
现在可以运行了~

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.