黑马程序员技术交流社区
标题:
字符串的拼接(即有“+”号出现)的问题
[打印本页]
作者:
java8023
时间:
2015-6-3 21:38
标题:
字符串的拼接(即有“+”号出现)的问题
class Demo2
{
public static void main(String args[])
{
String s = null;
s += "abc"; //jvm是如此运行的s = (new StringBuilder(String.valueOf(s))).append("abc").toString());
System.out.println(s.toString());
}
}
复制代码
/**
字符串的拼接(既有“+”号出现)的问题:
一、只有字符串的时候,直接将两个字符串拼接在一起,在方法区常量池寻找,看是否有和拼接后相同的字符串,
若是有,就把已经有的地址值赋值,否则就在常量池开辟空间存放拼接后的字符窜,并把地址值赋值。
例子:
String str1="hello"; //常量池开辟空间存放“hello”,并将地址赋值给str1
String str2="world"; //常量池开辟空间存放“world”,并将地址赋值给str2
String str3="helloworld"; //常量池开辟空间存放“helloworld”,并将地址赋值给str3
String str4="hello"+"world"; //先将两个字符串拼接,在方法区内存中寻找看是否有相同内容的,发现有,就把已经有的地址值赋值给str4.
System.out.println(str3==str4);
结果就是true,因为两者指向了同一个内存地址。
二、若是有变量参与的时候,就会创建new StringBuilder()对象
并且引用型变量会首先调用 String.valueOf(obj),然后String.valueOf(obj)的具体实现是:
return obj == null ? "null" : obj.toString(),
由于obj所属的对象不同,其输出的内容不也不同,
若是没有重写Object类中的tostring()方法,那么就是其内存地址值了,要是重写就是其重写后方法输出。(一般情况都是字符串变量)
然后使用stringbuilder的append()方法将获得字符串添加进容器,最后,stringbuier调用tostring()方法,得到字符串。
即如:String str=s+"aa";//其中s是一个对象的应用,引用性变量(实际上基本数据类型也是适用的)
jvm解析:
String str=(new StringBuilder().append(String.valueof(obj)).append("aa").toString());
String str=(new StringBuilder().append(String.valueof(obj== null ? "null" : obj.toString())).append("aa").toString());
实际上打印的时候,println会再调用引用对象,tostring方法,实际上这个时候都是字符串了,就是默认调用其tostring()方法
}
}
作者:
TOBESKY
时间:
2015-6-3 21:57
很详细。。。。
作者:
城北一直晴。
时间:
2015-6-3 22:18
很不错!
作者:
LoveMyself
时间:
2015-6-3 22:51
总结的很好呀
作者:
sky930722
时间:
2015-6-3 23:10
总结的很详细,赞一个
作者:
下一页5
时间:
2015-6-3 23:14
我不会我现在
作者:
jakemind
时间:
2015-6-3 23:26
领教了!!!!!!!!!!!!!!!!!!!!!!111
作者:
东邪
时间:
2015-6-3 23:38
学习了!
作者:
卡布
时间:
2015-6-4 00:39
学习啦~
作者:
山崩地裂
时间:
2015-6-4 08:34
受教了。。。。很 不错的总结
作者:
java8023
时间:
2015-6-5 00:37
怎么就不给加技术分呢。这是为什么呢
作者:
richaled
时间:
2015-6-5 08:05
不错,学习了
作者:
乌卡卡
时间:
2015-6-5 10:45
技术分怎么加
作者:
海角秋风
时间:
2015-6-5 11:03
学习了。。。很详细。。。
作者:
星辉祝愿
时间:
2015-6-5 11:34
总结的很好呀
作者:
开弓没有回头箭
时间:
2015-6-5 14:40
学习了...
作者:
java8023
时间:
2015-6-6 22:19
版主在哪里啊,快点来啊技术分分
作者:
ZYZQ
时间:
2015-6-6 23:28
总结的很不错
作者:
l李伟
时间:
2015-6-7 01:34
这题不错,很详细的
作者:
xiaodong
时间:
2015-6-7 01:46
学习了!!!
作者:
君子无醉
时间:
2015-6-7 02:52
虽然以前知道,但是楼主总结的很详细 感觉又学到了很多,赞一个
作者:
jjyy1008
时间:
2015-6-7 03:00
总结的很好
作者:
嘎路的米
时间:
2015-6-7 10:05
学习了!
作者:
Monster
时间:
2015-6-7 10:19
很详细,学习了,从来没有想过这么多
作者:
老徐
时间:
2015-6-7 10:33
完全看不懂 这是第几天的内容啊,,,,,,,
作者:
yang2015
时间:
2015-6-7 16:03
学习学习
作者:
hnyzhlq
时间:
2015-6-7 16:45
学习了~~
作者:
坏坏总是我
时间:
2015-6-7 17:48
很好,也解决了我的问题
作者:
langxiao505
时间:
2015-6-7 18:18
顶,很详细
作者:
一休
时间:
2015-6-7 20:24
基础班入学考试这类题便做错了
作者:
且听风_R0pZK
时间:
2015-6-7 20:32
学习了,感谢楼主的分享!
作者:
银哥
时间:
2015-6-7 21:13
学习一下
作者:
暨雪
时间:
2015-6-8 00:23
挺有耐心的
作者:
MissMr.
时间:
2015-6-8 00:50
貌似不错
作者:
java8023
时间:
2015-6-10 23:08
有时候很奇怪,基本数据是不是也可以这么解释呢
作者:
java8023
时间:
2015-6-11 21:22
有没有更好的解释呢,今天看到在editplus中解析的不一样,很是不解啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2