equals和==的区别
equals和==的区别,两个String之间判别,两个Integer之间判别
- java中的两类数据类型
- 基本数据类型,也称原始数据类型:
数值型:包含整数型(byte short int long)和浮点型(float double)
字符型:char
布尔型:boolean- 引用数据类型
类(class,复合数据类型):String,Integer,Date
接口(interface)
数组(array)
- “==”
- 基本数据类型。应用双等号"==",比较的是他们的值。
- 引用数据类型。当用"=="进行比较的时候,比较的是在内存中的存放地址(堆内存地址)。
注:除非是同一个new出来的对象,比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。
- equals()
- JAVA当中所有的类都是继承于Object这个超类的,类中定义了一个equals的方法。
- 初始默认行为是比较对象的内存地址值
- 对于String、Integer、Date复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟"=="的结果相同;如果被复写,按照复写的要求来。
//在Object类中equals()源码:
public boolean equals(Object obj){
//this - s1
//obj -s2
return (this == obj);
}
- "=="和equals作用:
- 基本类型:比较的就是值是否相同
引用类型:比较的就是地址值是否相同- 引用类型:默认情况下,比较的是地址值。
- String类
- 例子
String s1 = “Hello”;
String s2 = “Hello”;
String s3 = new String(“hello”);
String s4 = s3; //引用传递
s1 == s2 //true
s1 == s3 //false
s1 == s4 //false
s3 == s4 //true
s1.equals(s3) //true
s1.equals(s4) //true
s3.equals(s4) //true- 字符串比较之中“==”和equals()的区别:
==:比较的是两个字符串内存地址(堆内存)的数值是否相等,属于数值比较;
equals():比较的是两个字符串的内容,属于内容比较。
- 字符串缓冲池
- 例子
String s1 = “Hello”;
String s2 = new String(“Hello”);
s2 = s2.intern();
s1 == s2 //true
s1 equals s2 //true- (java.lang.String的intern()方法"abc".intern()方法的返回值还是字符串"abc",表面上看起来好像这个方 法没什么用处。但实际上,它做了个小动作:检查字符串池里是否存在"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会 把"abc"添加到字符串池中,然后再返回它的引用。
)