==可以用于基本类型之间的比较也可以用于引用类型的比较
为什么是true
String ss= "aaa"
//创建出来的对象放在一个特殊的地方,字符串常量池,池机制 共同指向了同一个对象“中国红”
??????????
在池中一旦创建对象,第二次再创建一模一样的时候,认为已经创建了,在栈当中两个引用值指向了一个共同对象;
String s = new String("中国");
String s2 = new String("中国");
System.out.pritnln(s==s2);返回false
??????????
创建在堆中,内存都会分配空间,相当于创建了两个;
equals
比较的是对象的内容: ==比较的是内容和地址;
String s = new String("abc");
创建了两个对象
String s = new String("abc"); //创建了两个对象,一个在堆中,一个在串池中
String t = new String("abc");
String k = "abc"; //一个在字符串池里
System.out.println(s==t)//false
System.out.println(k=="abc')//true都是在串池当中
String s2 = "ab" + "c"; //在内存中创建了几个对象 ab 、c、abc 不建议使用浪费内存;都在串池里面
String s3 = "abc";
System.out.println(s2==s3);//true此时s2和s3共同指向了一个对象
System.out.println(s==s2)//false一个创建堆里一个创建串池;
System.out.println(s3.equals(s2));//true
自己写一个类
A3 a = new A3();
A3 b = new A3();
System.out.println(a==b);//true?????
System.out.println(a.equals(b))//true?????????
如何重写equals方法,如何重写hachcode???
String类型
System.identityHashCode(String名字)System是位于System类里面,调用的时候方法不会被重写。所以会产生实际哈希码;System.identityHashCode产生的是伪地址;