码迷,mamicode.com
首页 > 编程语言 > 详细

<Thinking in JAVA>笔记 字符串

时间:2014-10-15 04:04:10      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:thinking in java   字符串   编译器   

1.字符串String对象是不可变的,每一个看起来会修改String的方法,实际上都是创建了一个新的String对象

2.重载+和StringBuilder:

   用重载+,实际上编译器自动引入了StringBuilder,并为每一次重载+做了一次append(),最后调用toString生成结果

   区别:虽然底层都是StringBuilder,但使用重载+时,每+一次,就会生成一个新的StringBuilder,而用StringBuilder的append()方法时,只会生成一个StringBuilder,所以在简单的字符串操作时,可以信赖编译器,否则就用StringBuilder

3.StringBuilder和StringBuffer

   StringBuffer是线程安全的,开销会稍微大一点

4.无意识的递归:

public class Test {
     @Override     
     public String toString() {          
         return "Test [getClass()=" + getClass() + ", hashCode()=" + hashCode()                    + ", toString()=" + this.toString() + "]";     
     }     
     public static void main(String[] args) {          
         Test t = new Test();          
         System.out.println(t);     
     }
}



toString方法中的this.toString(),前后有个重载+操作,编译器会将Test转换成字符串,但巧的是,toString方法还是这个toString,以此递归下去,因此java.lang.StackOverflowError;

改成super.toString(),Object.toString()才是负责此任务的方法





本文出自 “8377289” 博客,请务必保留此出处http://8387289.blog.51cto.com/8377289/1564129

<Thinking in JAVA>笔记 字符串

标签:thinking in java   字符串   编译器   

原文地址:http://8387289.blog.51cto.com/8377289/1564129

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!