请教一道简单的关于String字符串引用的问题。。。。。。 String 类型定义的,是不可变的,一旦被创建,就不能修改它的值。你去看看String 与StringBuffer的区别你就知道了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ==比较的是对象的地址,而不是内容此处用s2.equals(s3) 简而言之,s2 和 s3 是两个内容相同的字符串,而不是同一个字符串,所以用 == 比较结果是 false == 比的是两边是否为同一个对象,equals() 才是比较内容 String s1 ="a"+"b";String s2 ="a"+"b";s1==s2;结果为true.为啥这个是true,上面那个是false s2,s3不是同一字符串,为啥s1 s2是同一字符串? 这么写的话,定义s1的时候,"ab" 这个字符串放在了内存的常量区定义s2的时候,会先检查常量区是否有同样的"ab",找到了就直接指向它,而不用再次生成一个"ab"这种情况用 == 比较,虽然结果是对的,但不建议这样写,因为本意不是这样的 照这样说,第一种情况s2 s3 应该也是一样的为啥显示false呢 区别在于String s2 ="a"+"b";这句看似是运算,但因为都是常量,编译器直接就改成String s2 = "ab" 了而String s2 = s1 + "b";这句,是真正的运算,编译期间是没法知道运算结果的,所以不会自动做处理 虽然不会自动处理,但是你可以用 s2.intern() 这个方法,强制放到常量区里,然后就跟String s2 ="a"+"b";一样了 懂了一点了,但是,s2引用指向的是s1+"b"的结果 就是"ab",在字符区。s3创建的时候如果先检查字符区是否有"ab"的话,那按说把s2的地址给s3了,s2还是等于s3啊 你可以看下这篇东西http://1023mmmm.blog.163.com/blog/static/3884022520121022149911/ “a”+"b"和“ab”的确是指向同一个地址的。但是在s3创建的时候是不知道s1的值的。只能开辟新的内存空间用于保存s3的内存地址。 求高手来改造 Socket 通信问题 readUTF()方法的作用,API写的太难懂了 这个作者有人清楚吗?rod。johnson, 求教一个在SWT中关于应用鼠标的问题 liunx下安装JDK出错 大家给个思路吧 急!!!关于用jar命令打包后,怎样才能双击执行的问题 请问如何将表中一列的属性设为jComboBox? 学java做网页要多少时间? addActionListener报错 java实现小车在公路上跑,那公路应该怎么画呢?
此处用s2.equals(s3)
== 比的是两边是否为同一个对象,equals() 才是比较内容
String s2 ="a"+"b";
s1==s2;
结果为true.为啥这个是true,上面那个是false
这么写的话,定义s1的时候,"ab" 这个字符串放在了内存的常量区
定义s2的时候,会先检查常量区是否有同样的"ab",找到了就直接指向它,而不用再次生成一个"ab"这种情况用 == 比较,虽然结果是对的,但不建议这样写,因为本意不是这样的
区别在于
String s2 ="a"+"b";这句看似是运算,但因为都是常量,编译器直接就改成String s2 = "ab" 了
而String s2 = s1 + "b";这句,是真正的运算,编译期间是没法知道运算结果的,所以不会自动做处理
s3创建的时候如果先检查字符区是否有"ab"的话,那按说把s2的地址给s3了,s2还是等于s3啊
你可以看下这篇东西
http://1023mmmm.blog.163.com/blog/static/3884022520121022149911/