- public class Show{
- public static void main(String[] args){
-
- String s1 = "Welcome to Java";
- String s2 = new String("Welcome to Java");
- String s3 = "Welcome to Java";
-
- System.out.println(s1 == s2);// 显示false
- System.out.println(s1 == s3);// 显示true
- /*
- * 内存中存在一个字符串缓冲区,类似理解为字符串缓冲区;
- * 用双引号内的字符序列为直接量创建的字符串,存在于内存的字符串常量池中。
- * 用直接量新建一个字符串对象,JVM就会到常量池中去寻找,如果没有就创建一个。
- * 如果匹配那么就把已有字符串对象引用地址传递给新建对象。它们指向同一个地址值。
- * 而用new操作符创建的对象,在堆内存中创建一个对象,并把地址传递给变量
- *
-
- * 操作符 == 比较两对象的地址值
- * 方法equals()根据字符串特点进行了覆写与Object类中的equals()方法不同,它比较两字符串对象的内容。
- */
- System.out.println(s1.equals(s2));// 显示true
- s1 = "Hello Java";// 原来字符串中String s1 = "Welcome to Java" s1 的内容并没有更改,只是变量引用值s1指向新的对象地址;
- System.out.println(s1 == s3);// 显示false
- System.out.println(s2.equals(s3)); //显示true
- System.out.println(s2 == s3); //显示false
- }
- }
复制代码 |