Java String类型的equals和“==”总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java String类型的equals和“==”总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2204字,纯文字阅读大概需要4分钟。
内容图文
先看例子:
public class TestString {
public static void main(String[] args) {
String str1 = "AB";
String str2 = new String("AB");
final String str3 = "A";
final String str4 = "B";
String str5 = "A";
String str6 = "B";
String str7 = str3 + str4;
String str8 = str5 + str6;
String str9 = str3 + str6;
String str10 = "A"+ "B";
//计算结果
System.out.println(str1.equals(str2));
System.out.println(str1 == str2);
System.out.println(str1 == str7);
System.out.println(str1 == str8);
System.out.println(str1 == str9);
System.out.println(str1 == str10);
System.out.println(str1 == "AB".intern());
}
}
结果为:true false true false false true true;
结果一,二解释:
使用“==”比较是直接用实际物理内存地址去比较,而equals是基类Object类的方法,在未重写时与“==”无区别,但String类重写其方法,源码为:
public boolean equals(Object anObject) {
//比较实际物理地址
if (this == anObject) {
return true;
}
//判断anObject是否为String类型
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;
//没用fori循环
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
首先,用“==”比较,如果实际物理地址相等,即可证明所比较的必是相等。再判断类是否一致或是String的子类(String类被final所修饰必不可能有子类) ,进一步判断两个String的长度是否相等,最后将两个String变为char数组,逐个比较。注意:在比较两个char数组时所用方法。
其他结果解释:
对于String a = "123",会先去常量池中找是否有字符串“123”有则赋值(String不是原生类,所以是引用传递),没有就会new String("123")再赋值,如果使用new String(“123”),就不管常量池中是否有,都要去堆中建立一个对象。String str5 = "A" String str6 = "B" String str8 = str5 + str6相当于 String str8 = new String(str3 + str4); 在String str10 = "A"+ "B"中,会做优化调用StringBuilder(操作String,但String变量所引用地址不变),相当于String str10 = "AB"。(类似优化有byte num = 1 num += 1可以编译运行 num = num + 1不能编译运行),当final String str3 = "A" final String str4 = "B" String str7 = str3 + str4时,修饰符final会将变量放到常量池中,当str3和str4都被修饰时String str7 = "AB",否则即是String str9 = new String(str3 + str6)。
内容总结
以上是互联网集市为您收集整理的Java String类型的equals和“==”总结全部内容,希望文章能够帮你解决Java String类型的equals和“==”总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。