下面是我写的一个有关字符串的测试类 |
|
String s1=new String(“a”)
String s2=new String(“a”)这样是在栈中有两个引用s1和s2,它们的值不同,分别指向堆中的两个对象,对象的值都是a. 而String s1=”a”; String s2=”a”;在栈中有几个引用呢?在堆里有几个对象呢?它们是怎么指向的啊? |
|
1分 |
关注
|
1分 |
s1和s2他们指向的是同一个”a”,所以==。如果
String s1=new String(“a”) String s2=new String(“a”) 就是s1!=s2,因为s1,s2的分配的内存地址不同了。 |
1分 |
UP~~~~
|
我今天看了JDK的帮助,它说String str = “abc”;等价于char data[] {“”a””, “”b””, “”c””};
String str = new String(data);我又测试了下这个: class Test { public static void main(String[] args) { char data[] = {“”a””, “”b””, “”c””}; String s1 = new String(data); char data1[] = {“”a””, “”b””, “”c””}; String s2 = new String(data1); if(s1==s2) { System.out.println(“==”); } else { System.out.println(“!=”); } if(s1.equals(s2)) { System.out.println(“equals”); } else { System.out.println(“!equals”); } } 为什么输出是!=和equals呢? |
|
1分 |
学习
|
1分 |
String s1=”abc”;
String s2=”abc”; 结果s1==s2?巧合? |
以前只听说
String s1=”abc”; String s2=s1; 这种情况下s1==s2 但是我试了几次都是== |
|
1分 |
使用new String()构造字符串,总会在内存中新辟空间存放内容
所以地址是不一样的 用==判断总是不同的 equals判断内容相同所以能相同 |
1分 |
用String s1=”abc”,”abc”是一常量放在串池中
当再声明一个String s2 = “abc”时s2指向的地址与s1指向的地址是一样的 所以用s1==s2判断时,返回值为true ; 用equals 就不用说了内容一样返回true ; |
1分 |
同意SADOCom的观点
|
1分 |
同意SADOCom()
JAVA是“懒”,看到已经存在“abc”这个字符串,就在String s2时直接拿来引用了。 |
1分 |
楼上高见
|
== 判断地址 equals判断内容 明白否?
|
|
楼上的兄弟高招简洁明了啊!
|
|
== 判断地址 equals判断内容
========================= 简明 易懂 |
|
用String s1=”abc”,”abc”是一常量放在串池中
当再声明一个String s2 = “abc”时s2指向的地址与s1指向的地址是一样的 java不会再开辟空间给字符串abc的哦,所以字符串还是以前的字符串,所以String s1=”abc”,String s2=”abc”,就是s1指向了abc字符串,s2也指向了abc字符串,==用来比地址,对于同一个abc字符串,地址显然是一样滴嘛。 |
|
关注
|