关于java中2个String相等不相等的总结

关于java中2个String相等不相等的总结_第1张图片

 可以看出String类被final修饰,表明这个类不能被继承。

  String 类代表字符串。Java 程序中的所有字符串字面值(如"abc" )都作为此类的实例来实现。就是说在 String a= ”ab“中把这个”ab“当成String类的一个实例来看且是final的。关于final关键字可以参照我上一篇转载的blog理解的很到位。

  字符串是常量;它们的值在创建之后不能改变。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享它们。这句话截选java..API那么应该怎么理解呢?

  且听我慢慢道。可以这么说吧String类维护了一个池,把程序中的String对象放到池子里面,于是在我们编码的过程中只要用到相同值的String就是同一个对象。举个例子来给你们看看,

String a =“abc” String b = "abc" 因为 “abc” 是一个字符串字面常数所以它是放在字符串池中的,因而a和b实际引用的是同一个字符串对象因而

a = b

     再进一步来一个问题:string a = “abc”  String b =“a“+ “bc” 现在的a和b是不是还是那样a==b呢? 听我解释:b是常量表达式(编译时候能确定的就算常量表达式,运行时候确定的就不算)计算出来的也就是所谓的字符串的拼接。因而a=b还是正确的。其实对于这种字符串拼接的情况可以归根结底一句话总结到位。判断相等不相等是String 对象在编译的时候他会把你拼接起来去常量池中寻找是否存在相等的String对象。运行期的不算所谓运行期不算就是像这种情况。String d = ”abcd“  String e =a+”d“  此时e !=d这就不是我前面提到的拼接,因为e在是在运行期才能确定出的字符串。

你可能感兴趣的:(java)