<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()才是负责此任务的方法

时间: 2024-12-29 04:27:17

<Thinking in JAVA>笔记 字符串的相关文章

5.7-全栈Java笔记:字符串String的常用方法

字符串String String基础 1)String位于java.lang包中,Java程序默认导入java.lang包. 2)ava字符串就是Unicode字符序列,例如串"Java"就是4个Unicode字符J.a.v.a组成的. 3)Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例. [示例1]String类的实例 String e = ""  ; // 空字符串a

Java学习笔记--字符串和文件IO

1.Java中的字符串类和字符的表示 2.区分String,StringBuilder和StringBuffer 3.从命令行中给main方法传递参数 4.文件操作 1 Java中的字符串和字符 1.1 String类 字符串就是由一系列的字符组成的序列,在很多语言中,比如C语言,将其存储在一个数组中.现在运用Java的思想,就要将字符串视为一个对象,其中Java规定的String类有11个构造方法,同时还有至少40种实现的方法,通过String类的学习,可以很好地了解面向对象的类和对象的思想.

java 笔记 String 和Stringbuffer

String 是一个类,而不是java中的基本数据类型. String s = "abc";  "abc"是一个对象,存放在常量池中.一旦被初始化就不能被更改了. s = "cde";  这里并没有改变字符串,而是使对象引用指向字符串cde: String s1 = new String("abc"); String s2 = "abc"; 这两者有什么不同,第一个有两个对象,一个是"abc&qu

4.5-全栈Java笔记:垃圾回收机制

垃圾回收机制(Garbage  Collection) Java引入了垃圾回收机制,令C++程序员最头疼的内存管理问题迎刃而解.JAVA程序员可以将更多的精力放到业务逻辑上而不是内存管理工作上,大大的提高了开发效率. 垃圾回收原理和算法 1)内存管理 Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放. 对象空间的分配:使用new关键字创建对象即可 对象空间的释放:将对象赋值null即可.垃圾回收器将负责回收所有"不可达"对象的内存空间. 2)垃圾回收过程 任何

5.2-全栈Java笔记:面向对象的特征(一)继承 | 下

上节我们聊到「Java面向对象的特征:继承」这节我们继续聊一下继承的应用. Object类 Object类基本特性 Object类是所有Java类的根基类,也就意味着所有的JAVA对象都拥有Object类的属性和方法.如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类. [示例1]Object类 public class Person { ... } //等价于: public class Person extends   Object { ... } toStrin

java笔记--使用线程池优化多线程编程

使用线程池优化多线程编程 认识线程池 在Java中,所有的对象都是需要通过new操作符来创建的,如果创建大量短生命周期的对象,将会使得整个程序的性能非常的低下.这种时候就需要用到了池的技术,比如数据库连接池,线程池等. 在java1.5之后,java自带了线程池,在util包下新增了concurrent包,这个包主要作用就是介绍java线程和线程池如何使用的. 在包java.util.concurrent下的 Executors类中定义了Executor.ExecutorService.Sche

4.3-全栈Java笔记:面向对象的内存分析

面向对象的内存分析 为了让大家对于面向对象编程有更深入的了解,我们要对程序的执行过程中,内存到底发生了什么变化,进行剖析,让大家做到"心中有数",通过更加形象的方式理解程序的执行方式. 老鸟建议:       本节是为了让初学者更深入了解程序底层执行情况,为了完整的体现内存分析流程,会有些新的名词,比如:线程.Class对象.大家暂时可以不求甚解的了解,后期学了这两个概念再回头来看我们这篇内存分析,肯定收获会更大. Java虚拟机的内存可以分为三个区域:栈stack.堆heap.方法区

Java 笔记(8)

JSP 技术 day8 JSP语法 + EL + JSTL day9 案例 2-3 个 综合小案例 day10 Servlet+JSP 综合练习 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP支持HTML语法,生成HTML方便. JSP技术与Servlet 技术区别和关系? JSP和Servlet技术都是用来动态生成网页的,Servlet不支持HTML语法,生成网页麻烦,JSP支持HTML语法,生

Java笔记(11)

day1 -- day3 XML Java基础加强 day4 -- day7 Servlet编程 day8 -- day10 JSP 综合案例 day11 -- day16 MySQL 数据库 练习SQL语句 JDBC编程 关系化数据模型? 常见关系化数据库有哪些? 收费产品 免费产品 Microsoft SQL Server : 微软公司产品,中等规模数据库 收费产品,运行在windows平台上 --- .net平台+SQLServer进行开发 Oracle :甲骨文公司产品,大型商业数据层,