==对比的是栈中的值,基本数据类型比的是变量的值,引用类型是堆中内存对象的地址

比如比较两个int值 就会比较两个值是否相等 而比较String时就会比较两个值的地址(因为他是引用类型值)

 

equals:object中默认也是采用==比较,通常会重写

Object

public boolean equals(Object obj){

   return(this==obj)

}

比如String里面就 已经帮我们重写了equals方法

String str1='hello'在常量池中分配内存

String str2=new String('hello')在堆中分配地址

str1==str2返回就是false 因为对比的是栈中的值 所以比较的是地址值

String str3=str2 这里赋给str3的就是str2的地址值

而equals已经重写了 对比的就是字符 所以都是true