equals()的缺省行为是拿references来比较。Java标准程序库中大多数class都覆写(override)了equals(),所以它们都会比较对象(而非其references)的内容是否相等。举一个《Thinking in Java》中的例子: class Value { int i; }public class EqualsMethod2 { public static void main(String args[]) { Value v1 = new Value(); Value v2 = new Value(); v1.i = v2.i = 10; System.out.println(v1.equals(v2)); } } 其输出的结果是false.
再比如: public class EqualsMethod { public static void main(String args[]) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1.equals(n2)); } } //the result is true
看看吧
看看吧
str=""; 在内存中开辟了空间,只是没有放东西,可以使用这个引用str
str = null;只是说明有这么个String的引用str,但是没有给他分配空间,不能在程序中使
用str,顶多出现在判断语句中,if (str==null)... str = null,多数情况是
之前已经有了str="...";通过str=null,告诉编译器,我原来申请的空间不要
了,你可以回收了。
String str=new String();应该和str=""一样的作用.
str==""这样比较是不可以的,因为str是某块内存的引用,""虽然没有放东西,但是也代表
某块内存的引用,if (str=="")... 只是在比较这两个引用(当然不等)
,而不是比较他们引用空间的内容
一般比较String的时候是通过s1.equals("s2")来实现的,当然也可以
if (s1.compareTo(s2))==0 ... (表示s1,s2内容相等)
比如int i = 1;
if(i==1)
{
.....
}String str = "hello";
if(str.equals("hello"))
{
....
}
==是用来比较两个"对象"的引用是不是指向同一个对象.
如果用==比较的不是对象而是简单类型,则都是比较他们的值是否相等.java类库中String实现了equals()方法.
在你的类要用一些特定的标准判断是否相等(或相同)时也需要实现该方法.
如:判断一个学生类,实现equals()方法学号判断只要相同就认为是同一个学生.
String b=new String("hi");Boolean e=(a==b);//为什么这个a==b为true?a跟b按道理应该是分别分配对象,虽然大家的内容是一样的
equals 两个对象内容是否相同。我的印象中,整个java规范里只有jvm的pcode里有地址的概念。
java语言里,所有对象都是引用(reference)。
而且 即使 object1 == object2,
object1 和 object2的reference value 也不一定相等。
而是这两个reference 引用了同一个对象。这点在纯java环境里是看不到的,
不过用过JNI的朋友可以用NewGlobalRef来证明这一点。
public class E{
public static void main(String[] args){
String a="hi";
String b="hi";
System.out.println(a==b);//为什么是true?
}
}
我自己写了一个类abc,
然后加入arraylist.add(abc)
然后if (arraylist.get(i) ?? abc == true)
??处写==,还是equals
class Value
{
int i;
}public class EqualsMethod2
{
public static void main(String args[])
{
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 10;
System.out.println(v1.equals(v2));
}
}
其输出的结果是false.
public class EqualsMethod
{
public static void main(String args[])
{
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));
}
}
//the result is true