黑马程序员技术交流社区
标题:
Byte常量在内存中存储位置
[打印本页]
作者:
山里孩子
时间:
2015-3-24 23:07
标题:
Byte常量在内存中存储位置
今天老师讲的这个题 有点....出来分享下啦.看下输出结果是什么?
class StringTest2
{
public static void main(String[] args)
{
String s1 = "a";
String s2 = "b";
String s3 = "ab";
System.out.println(s3 == s1 + s2);
System.out.println(s3 == "a" + "b");
}
}
复制代码
作者:
有丶时候
时间:
2015-3-25 00:28
额,依稀记得视频里老师说过,s3==s1+s2中s1,s2,s3表示的是地址。所以结果是false。
s3==“a”+“b”就是判断的字符串了,所以结果是true。
不知道我记得对不对。{:3_66:}
作者:
妖妖
时间:
2015-3-25 00:33
当我们使用字符串的时候,==是比较的两个字符串是不是指向同一个对象。程序在运行的时候会创建一个字符串缓冲池,程序会把字符串常量(比如说,题目中的“a”,“b”“ab”)放入字符串缓冲池中。现在我们将题中的“a”+“b”赋值给String 类型的s4,我们在创建字符串的时候,程序会首先在这个stirng缓冲池中寻找是否有相同值得对象,所以在进行“a”+“b”的时候,程序找到了“ab”,这时我们就将s4指向了“ab”,所以,现在“ab”就与s4指向了同一个对象,所以就会输出“true”。
但是,我们在进行变量的运算时,就不一样了,在进行s1 + s2的时候,他们会将得到的字符串对象储存在各自的内存中,而不是放在缓冲池中。尽管结果是一样的,但是因为不是指向同一个对象的原因,所以就有了两个不同的结果。我记得在视频中有涉及到类似的问题啊!
作者:
和谐木马
时间:
2015-3-25 00:50
要不怎么有个字符串常量的名称!还有你标题讲byte类型,题目却是String……
作者:
圣光忏悔
时间:
2015-3-25 14:29
在执行字符串的加法的时候编译器直接将数值加在一起在运算的
用反编译工具打开
s3 == "a" + "b"
其实是
s2 == "ab"
是加在一起了再做运算的.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2