Java小问题(关于equals)

来源:百度知道 编辑:UC知道 时间:2024/05/18 08:13:17
public class OperatorsAndExpressions
{
void equalsMethod2()
{
String s1=new String("Hello");
String s2=new String("Hello");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));

class MyValue
{
int i;
}

MyValue v1=new MyValue();
MyValue v2=new MyValue();
v1.i=v2.i=2003;
System.out.println(v1.equals(v2));
}

public static void main(String args[])
{
OperatorsAndExpressions OperAndExp=new OperatorsAndExpressions();
OperAndExp.equalsMethod2();
}
}

结果是
false
true
false

为什么第8行的 s1.equals(s2)是真呢???
而第18行的v1.equals(v2)是假呢???

麻烦高手解答下~~~谢谢~~~
我还想问下如果
String s1=new String("Hello");
String s2=new String("Hello");
括号里面没内容,是不是第8行就会变成假???

因为s1和s2其实都是String类型的引用对象,他们都指向了"Hello"
内存中的空间是一样的。。
但是v1 v2由于各自有各自的空间,所以是不一样的。。
equals比较的是内存,
内存地址都不一样,那么两个肯定不一样了。。

对于补充的回答:

字符串和其他对象还是有一定的区别的。以下我给你慢慢讲
呵呵
Java运行环境有一个字符串池,由String类维护。执行语句String str="abc"时,首先查看字符串池中是否存在字符串"abc",如果存在则直接将"abc"赋给str,如果不存在则先在字符串池中新建一个字符串"abc",然后再将其赋给str。执行语句String str=new String("abc")时,不管字符串池中是否存在字符串"abc",直接新建一个字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然后将其付给str。前一语句的效率高,后一语句的效率低,因为新建字符串占用内存空间。String str = new String()创建了一个空字符串,与String str=new String("")相同。

所以综上所述
String s1=new String("Hello");
String s2=new String("Hello");
括号里面没内容,结果还是true。

最佳答案说得不正确!!!
s1和s2对应的空间是不一样的,这个答案说得不正确。如果是String s1="hello";String s2="hello";,这时s1和s2才是对应同一内x存空间。上面System.out.println(s1==s2);之所以输出false就是这样的原因,因为String重写了Object的equals方法,equals只是比较字符串内容是否相同,要比较