String类中关于"=="号和equals区别的问题

Posted ruin%

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String类中关于"=="号和equals区别的问题相关的知识,希望对你有一定的参考价值。

String s1="ab";
String s2="abc";
String s3=a1+"c";
System.out.println(s3==s2);
判断输出的是true还是false

答案是false
这是原理图

这是API原话
  • Java语言为字符串连接运算符(+)提供特殊支持,并为其他对象转换为字符串。 字符串连接是通过StringBuilder (或StringBuffer )类及其append方法实现的。 字符串转换是通过方法来实现toString

一旦出现+ 就会调用底层的StringBuffer或者StringBulider类中的apand方法实现连接,然后用toString方法显示出来,所以他是堆区的;
但是排除常量优先机制(就是多个常量用+号连接,例如String s4="a"+"b"+"c",它在编译的时候就是abc了,然后再把abc赋值给s4)那么这样如果输出
System.out.print(s4==s2)显示的是ture

以上是关于String类中关于"=="号和equals区别的问题的主要内容,如果未能解决你的问题,请参考以下文章

java中关于Pattern的一个方法

java容器中关于equals的重写

求教大神,java中关于String类的getBytes()方法的问题

asp.net mvc 中关于验证问题data-val-number="The field 部门号 must be a number

Java中关于String对象引用的问题?

java 中关于toArray()方法的问题