请教一道简单的关于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的内存地址。 Thinking in java 第四版 参数化类型 求解!? JAVA 图片浏览 Telnet 中输入流输入流问题 java生成的md5怎么同c#生成的md5值不一样???? 请教PreparedStatement问题,求各位大狭,关注下帮个忙。 请问制作Linux下 java web应用程序 的打包安装文件 从 1 + 到 100 哪错了 !!??? 急!!!!STRING问题在线等待!! 关于jar的使用 我如何在一个applet中把焦点设置到文本框中? 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/