java String类型的比对

//20210117
写在前面:今天写原型模式代码的时候涉及到了浅克隆和深克隆的问题,就想起了String类型貌似和这个有些关系,故去做了个实验并在此记录下来

  • 众所周知,java中“==”运算符在比对对象类型时比对的是对象的地址,而equals()方法比对的是内容
  • 所以按道理来说我在方法里创建两个相同内容的String对象,使用“==”运算符比对的时候应该报出错误,但是实验里返回的是true,去搜了资料,发现String使用了享元模式,相同内容的对象会指向同一个地址,改变之后再创新新对象
  • 实验源代码如下:
public static void main(String[] args) {
        String s = "ABC";
        String ss = "ABC";
        System.out.println(s == ss);
        System.out.println(s.equals(ss));
        System.out.println(s);
        System.out.println(ss);
        s = "abcd";
        System.out.println(s);
        System.out.println(ss);
        System.out.println(s == ss);
        System.out.println(s.equals(ss));
    }
  • 输出如下:

以上
希望对大家有所帮助

原文地址:https://www.cnblogs.com/lavender-pansy/p/14288441.html