1 java中所有类的基类是Object
2 java中的 == 仅仅判断两个对象是否存储在相同位置,如果存储在相同位置(存储在相同位置表示引用同一对象)一定相等,但是不同内存空间的对象可能是一个对象的多个副本。
3 String 、Math、还有Integer、Double。。。。等这些封装类重写了Object中的equals()方法,让它不再比较句柄(引用),而是比较对象中实际包含的整数的值,即比较的是内容。
4 而Object的equals()方法比较的是地址值,如果你的自定义类没有重写equals()方法那么也将比较的是地址值
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
5java中对象传递都是址传递
6 String 是 * Strings are constant; their values cannot be changed after they
* are created. String buffers support mutable strings.
* Because String objects are immutable they can be shared.
7 如果比较两个String对象的内容是否相等请用equals方法,不要用==
8 看下边的例子
String a="Hello World!";
String b="Hello World!";
System.out.print(a==b); 结果 True 为什么?
因为String是一个不可变的对象,而String的直接量赋值会自动寻找以前生成了的内容相同的实例赋给引用 (because String objects are immutable they can be shared),若以前没有内容相同的实例存在,则创建新实例
String c=new String("Hello World!");
System.out.print(a==c); 结果 FALSE 为什么? 对象c通过new生成应该是一个新的对象和a、指向不同的引用
9 一般来说,如果你要把一个类的对象放入容器中,那么通常要为其重写equals()方法,让他们比较内容值而不是地址值。特别地,如果要把你的类的对象放入散列中,那么还要重写hashCode()方法;要放到有序容器中,还要重写compareTo()方法。