这是因为String对象的实例化有两种途径: 1.String s = new String("java"); 2.String s = "java";方法1,jvm会分配一个新的String实例;方法2,jvm会从它维护的一个String池中查找是否已有值为java的String实例,如果有就共享这个实例。这是jvm的一种优化手段。所以你的程序中String java="java",jvm会查找我提到的那个池,如果有则共享,如果没有新建一个"java"放入池中。接着System.out.println(java=="java"); ,==是比较是否为一个object,后面的那个"java"也是从池中公用的,所以两个object其实都是池中的那个,比较结果就是true了。
1.String s = new String("java");
2.String s = "java";方法1,jvm会分配一个新的String实例;方法2,jvm会从它维护的一个String池中查找是否已有值为java的String实例,如果有就共享这个实例。这是jvm的一种优化手段。所以你的程序中String java="java",jvm会查找我提到的那个池,如果有则共享,如果没有新建一个"java"放入池中。接着System.out.println(java=="java"); ,==是比较是否为一个object,后面的那个"java"也是从池中公用的,所以两个object其实都是池中的那个,比较结果就是true了。