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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Qiubang 中级黑马   /  2016-1-29 23:04  /  897 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

System.out.println("张三"=="张三");//true
String s1="张三"; String s2="张三";
  System.out.println(s1==s2);//true
System.out.println(s1=="张三");//true
为什么都是true,这是巧合?

4 个回复

倒序浏览
有个常量池吗 张三就一个 所以地址都一样喽
回复 使用道具 举报
String s="张三";//这种等于在常量池创建了"张三",s地址指向"张三"这个常量地址,你再以这种String ss="张三",
ss还是指向常量池中"张三"的地址.
如果你以下面这种形式创建等于在堆内存创建对象,而且每new 出一个新对象,就会创建一个新地址的新对象。"=="符号判断机制是 基本数据比较值,引用数据类型比较地址.
  1. String s1=new String("张三");
  2.        String s2=new String("张三");
  3.        System.out.println(s1==s2);
复制代码

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

回复 使用道具 举报
执行String s1="张三"; 在常量池创建了"张三",地址赋给s1.
执行String s2="张三"; 因为常量池中已经有了"张三,直接地址赋给s2.
执行System.out.println(s1==s2);就是true

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

回复 使用道具 举报
“張三”存在於常 量池中,當String數據類型的兩個引用指向了同一個對象時,地址都是一樣的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马