Java开发-面试题-0005-==和String的equals()和String的intern()方法的区别
更多内容欢迎关注我(持续更新中,欢迎Star✨)
Github:CodeZeng1998/Java-Developer-Work-Note
技术公众号:CodeZeng1998(纯纯技术文)
生活公众号:好锅(Life is more than code)
CSDN: CodeZeng1998
其他平台:CodeZeng1998、好锅
==和String的equals()和String的intern()方法的区别:
-
==
- 相比较的数据都是基本数据类型,比较的是数值。
- 相比较的数据都是引用数据类型(对象),比较的是两个引用是否指向内存中的同一个对象。
-
java.lang.String#equals
-
equals()
方法用于比较两个对象的内容或值。 -
默认情况下,
Object
类中的equals()
方法的行为类似于==
(检查引用是否相等),但许多类(如String
,Integer
等)重写此方法以提供基于值的比较。// String 的 equals 方法public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}// Integer 的 equals 方法public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;}
-
-
java.lang.String#intern
intern()
方法用于通过使用字符串池有效地管理内存。- 当在一个
String
对象上调用intern()
方法时,它检查字符串是否已经在字符串池中。如果是,它返回池中的引用。如果不是,它将字符串添加到池中并返回新添加字符串的引用。 - 这可以使得对具有相同内容且已被实习的字符串的后续
==
比较为真。
String str1 = new String("hello");
String str2 = new String("hello");String str3 = str1.intern();
String str4 = str2.intern();System.out.println(str1 == str2); // false
System.out.println(str1.equals(str2)); // true
System.out.println(str3 == str4); // true
上图由 RealVisXL 生成
关键词:An alien wearing sunglasses , poses a Java question
更多内容欢迎关注我(持续更新中,欢迎Star✨)
Github:CodeZeng1998/Java-Developer-Work-Note
技术公众号:CodeZeng1998(纯纯技术文)
生活公众号:好锅(Life is more than code)
CSDN: CodeZeng1998
其他平台:CodeZeng1998、好锅