A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区


  1. public class Show{

  2.         public static void main(String[] args){
  3.        
  4.                 String s1 = "Welcome to Java";
  5.                 String s2 = new String("Welcome to Java");
  6.                 String s3 = "Welcome to Java";
  7.                
  8.                 System.out.println(s1 == s2);// 显示false
  9.                 System.out.println(s1 == s3);// 显示true

  10.                 /*
  11.                  * 内存中存在一个字符串缓冲区,类似理解为字符串缓冲区;

  12.                  * 用双引号内的字符序列为直接量创建的字符串,存在于内存的字符串常量池中。
  13.                  * 用直接量新建一个字符串对象,JVM就会到常量池中去寻找,如果没有就创建一个。
  14.                  * 如果匹配那么就把已有字符串对象引用地址传递给新建对象。它们指向同一个地址值。

  15.                  * 而用new操作符创建的对象,在堆内存中创建一个对象,并把地址传递给变量
  16.                  *
  17.                  
  18.                  * 操作符 == 比较两对象的地址值
  19.                  * 方法equals()根据字符串特点进行了覆写与Object类中的equals()方法不同,它比较两字符串对象的内容。  
  20.                  */                 

  21.                 System.out.println(s1.equals(s2));// 显示true

  22.                 s1 = "Hello Java";// 原来字符串中String s1 = "Welcome to Java" s1 的内容并没有更改,只是变量引用值s1指向新的对象地址;

  23.                 System.out.println(s1 == s3);// 显示false
  24.                 System.out.println(s2.equals(s3)); //显示true
  25.                 System.out.println(s2 == s3); //显示false
  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

2 个回复

正序浏览
不全面啊,还有,这个是问题么?未解决什么?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马