笔记,equals 的比较
来源:互联网 发布:js改变css属性 编辑:程序博客网 时间:2024/04/28 13:31
final StringBuffer b=new StringBuffer("not immutable");
a=b;//编译期错误
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//编译期错误
引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //编译通过
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //编译通过
可见,final只对引用的"值"(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的"值"相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。
final只要是对应的引用地址,没有发生变化,就不会报错。
对应的integer缓存数组 -128 -->127
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}
public class testEquals {public static void main(String[] args) {final int i=8;int j=8;System.out.println(i==j);testEquals aa=new testEquals();testEquals bb=new testEquals();System.out.println(aa);System.out.println(bb);System.out.println(aa==bb);//比较的是地址System.out.println(aa.equals(bb));//这个equals的是调用object类里面的equals方法 没有重写此方法 所以不会相等aa=bb;System.out.println(aa);System.out.println(bb);System.out.println((aa==bb)+" a = b le");String a="i";String b="i";System.out.println(a);System.out.println(b);System.out.println(a==b); //最好还是用equals的比较 字符串的比较//注意,这里并不用str1.equals(str2);的方式,因为这将比较两个字符串的值是否相等。==号,根据JDK的说明,只有在两个引用都指向了同一个对象时才返回真值。//而我们在这里要看的是,str1与str2是否都指向了同一个对象。System.out.println(a.equals(b));String xx=new String("i");//String xx="i";String vv=new String("i");System.out.println(xx==vv);//false 比较的对象的地址 对象之间比较不能用==号 应该用equalsSystem.out.println(xx.equals(vv));//(重写了比较的是对象的值)这个正确是因为String类重写了object类里面的equals方法}}
true
testEquals@126b249
testEquals@182f0db
false
false
testEquals@182f0db
testEquals@182f0db
true a = b le
i
i
true
true
false
true
hashCode
public int hashCode()
- 返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,
java.util.Hashtable
提供的哈希表。hashCode
的常规协定是:- 在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
- 如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用
hashCode
方法都必须生成相同的整数结果。 - 以下情况不 是必需的:如果根据
equals(java.lang.Object)
方法,两个对象不相等,那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
object的方法
public boolean equals(Object obj) {
return (this == obj);
}
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
- 笔记,equals 的比较
- == 、equals()的比较
- 【学习笔记】比较符与equals
- Java中对象的比较 == 和 equals() -Java 学习笔记 (15)
- J2SE学习笔记:Set集合中相等性的比较,hashCode()与equals()
- Java 中字符串比较equals()和equalsIgnoreCase()的区别(学习笔记)
- equals.()与"=="的比较
- equals与==的比较
- ==与equals方法的比较
- ==和equals的比较
- equals 和 ==的比较
- bigDecimal的比较方法 equals和compareTo
- cmpareTo和equals字符比较的区别
- equals与== 的比较
- Iterator equals比较的逻辑误区
- equals和==的比较
- equals比较两个对象的内容
- Object 和 String 的equals比较
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
- 全排列
- Java--给定两个有序的数组,长度分别为m和n,求这两个数组中的第K个元素。
- test
- ASCII码排序杭电_Java_杭电ACM2000
- 笔记,equals 的比较
- Don't publicly announced personal goals
- TortoiseSVN使用教程(待续)
- cc150:判断一个字符串中的字符是否唯一
- 【数据结构】栈-链表的实现
- 【OC】Block
- CC150:翻转一个C风格的字符串
- 厥换扇铝慰牡笛字烤阜荡滦蛔敛腾
- 爻咏睬致铰傻久嚎琅阎宰睬贺伎凶