string类内存解析
sting s1 = “aa” string s2 = “aa” string s3 = new string(“aa”)
s1 和 s2 的内存地址其实是一样的,都是先从字符串常量池中去找。 new出来的东西都放在堆空间
==和equals操作是不同的
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。 equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同,重写后其实就是单纯比较内容,即逻辑上。
比较两个order对象的属性是否完全相同。
public boolean equals(object obj){
if(this == obj){
//地址如果都一样,属性肯定也一样
return true;
}else if(obj instanceof Order){
Order o1 = (Order)obj;
return this.orderID == o1.orderID && this.orderName.equals(o1.orderName);
//int直接用== string则用equals
}else{
return false;
}
}