本帖最后由 小黑子 于 2014-8-27 16:34 编辑
书上说:
”==“判定两个字符串是否是同一实例,即它们在内存中的存储空间是否相同。
然后我就写了个小程序实验一下,运行结果如图所示。
我有四个问题:
1、String s1 = "aabb"; 其中s是一个引用变量,这没问题吧?
既然是引用 System.out.println(s1); 输出结果不是地址,而是s1中的值呢?
同样是引用,数组 int[] arr = {1,2,3}; System.out.println(arr); 打印结果就是地址!
2、 s1 与 s2 、 sa 、 sb 的内存地址怎么会是相同的呢?
假设 s1 指向的地址是 0xa4c3
那s1之后,每创建一个String变量,都要检查内容是否与s1相同吗?相同的话再把 0xa4c3 给这个新建立的变量??
3、我很纳闷
System.out.println(s1==s2); 打印的是true
System.out.println("s1 == s2 : "+s1==s2);怎么会打印的是false呢?
4、我更纳闷的是 System.out.println("s1 == s2 : "+s1==s2); 的打印结果是 false
而不是 s1 == s2 : false
这是见鬼了么?
- class StringTest
- {
- public static void main(String[] args)
- {
- String s1 = "aabb";
- String s2 = "aabb";
- System.out.println(s1==s2);
-
- System.out.println("s1 == s2 : "+s1==s2);
- boolean bn = new AAA().cp(s1);
- System.out.println("类AAA中,s1 == sa : "+bn);
- System.out.println("函数BBB中,s1 == sb : "+BBB(s1));
- }
- static boolean BBB(String s1)
- {
- String sb = "aabb";
- return sb == s1;
- }
- }
- class AAA
- {
- public boolean cp(String s1)
- {
- String sa = "aabb";
- return sa == s1;
- }
- }
复制代码
|
-
4.png
(106.4 KB, 下载次数: 11)
|