黑马程序员技术交流社区

标题: 关于String的地址 [打印本页]

作者: Qiubang    时间: 2016-1-29 23:04
标题: 关于String的地址
System.out.println("张三"=="张三");//true
String s1="张三"; String s2="张三";
  System.out.println(s1==s2);//true
System.out.println(s1=="张三");//true
为什么都是true,这是巧合?


作者: 洋葱头头    时间: 2016-1-30 09:03
有个常量池吗 张三就一个 所以地址都一样喽
作者: j6819236    时间: 2016-1-30 10:34
String s="张三";//这种等于在常量池创建了"张三",s地址指向"张三"这个常量地址,你再以这种String ss="张三",
ss还是指向常量池中"张三"的地址.
如果你以下面这种形式创建等于在堆内存创建对象,而且每new 出一个新对象,就会创建一个新地址的新对象。"=="符号判断机制是 基本数据比较值,引用数据类型比较地址.
  1. String s1=new String("张三");
  2.        String s2=new String("张三");
  3.        System.out.println(s1==s2);
复制代码

作者: justinhsj    时间: 2016-1-30 13:08
执行String s1="张三"; 在常量池创建了"张三",地址赋给s1.
执行String s2="张三"; 因为常量池中已经有了"张三,直接地址赋给s2.
执行System.out.println(s1==s2);就是true
作者: 毕秋    时间: 2016-1-30 18:59
“張三”存在於常 量池中,當String數據類型的兩個引用指向了同一個對象時,地址都是一樣的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2