建设局网站首页,福建联美建设集团有限公司网站,开发网站访问流量赚钱,网站开发和运维区别首先明确一点#xff0c;在Java中比较的是两个对象的地址#xff0c;equals()比较的是两个对象的值#xff0c;如果使用equals()来替换#xff0c;则两个输出结果都为true。言归正传#xff0c;为什么第一个返回为false#xff1f;先看一下intern()这个方法的描述#x…首先明确一点在Java中比较的是两个对象的地址equals()比较的是两个对象的值如果使用equals()来替换则两个输出结果都为true。言归正传为什么第一个返回为false先看一下intern()这个方法的描述大意就是是一个字符串调用interned()方法的时候如果池中有和这个字符串值相等的字符串就会将池中的字符串返回如果没有就将这个字符串添加进去并返回这个字符串的引用。but通过new String(string)这个构造方法是先在字符串池中创建了构造参数string这是第一次创建字符串池中保存的是第一次的引用。接着new String()从字符串池中复制了string在堆中重新创建的了一次对象这是第二次创建所以调用interned()之后返回的是第一次创建的字符串池中的string而str1是堆中的string值相同但是地址不一样所以为false。str2的StringBuilder的toString()是通过char[]调用String数组在字符串池中创建了abcdef这个字符串字符串中保存的str2的引用所以调用interned()的时候返回的是str2的引用所以为true。这个问题我刚看到也是不知道为什么也是思考了一下午直到现在才想明白。希望多提这种问题来促进大家的思考和交流共同成长。