A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class Demo2
  2. {
  3.         public static void main(String args[])
  4.         {
  5.                 String s = null;
  6.                 s += "abc";                        //jvm是如此运行的s = (new StringBuilder(String.valueOf(s))).append("abc").toString());
  7.                 System.out.println(s.toString());
  8.       }
  9. }
复制代码

                /**
                 字符串的拼接(既有“+”号出现)的问题:
                一、只有字符串的时候,直接将两个字符串拼接在一起,在方法区常量池寻找,看是否有和拼接后相同的字符串,
                    若是有,就把已经有的地址值赋值,否则就在常量池开辟空间存放拼接后的字符窜,并把地址值赋值。
                    例子:
                        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()方法
               
        }
}

35 个回复

倒序浏览
很详细。。。。
回复 使用道具 举报
很不错!
回复 使用道具 举报
总结的很好呀
回复 使用道具 举报
总结的很详细,赞一个
回复 使用道具 举报
我不会我现在
回复 使用道具 举报
领教了!!!!!!!!!!!!!!!!!!!!!!111
回复 使用道具 举报
学习了!
回复 使用道具 举报
学习啦~
回复 使用道具 举报
受教了。。。。很 不错的总结
回复 使用道具 举报
怎么就不给加技术分呢。这是为什么呢
回复 使用道具 举报
不错,学习了
回复 使用道具 举报
技术分怎么加
回复 使用道具 举报
学习了。。。很详细。。。
回复 使用道具 举报
总结的很好呀
回复 使用道具 举报
学习了...
回复 使用道具 举报
版主在哪里啊,快点来啊技术分分
回复 使用道具 举报
总结的很不错
回复 使用道具 举报
这题不错,很详细的
回复 使用道具 举报
学习了!!!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马