转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10840495.html
一:字符串的不可变性
1、可变 与 不可变 辨析
Java中的对象按照创建后,对象的内容是否可以被修改,分为 mutable object 和 immutable object。【注意:是对象的内容不可变,而不是指向该对象的引用变量内容不可变。】
我们常见的不可变对象是几个基本数据类型的包装类——Integer、Double、String等。【想想为什么?——Tips:出于节省内存开销,避免重复创建。】
不可变类有5大基本原则:
1)类定义时,添加final修饰符,保证类不被继承【即:不允许在子类中被修改】
2)类定义时,其成员变量一概使用 final private 修饰,保证变量私有的同时不允许修改
3)不提供可以修改成员变量的方法,包括setter
4)在构造函数中采用deep copy的形式将参数值拷贝给成员变量,而不是直接将参数值赋给成员变量【因为引用类型的参数只是传了一个地址,这样在外部改变该地址的内容会导致不可变对象的成员变量改变】
5)在成员变量的getter方法中,不能直接返回成员变量本身,而是返回成员变量的copy对象【这也是为了防止引用类型的成员变量被外部获取后,改变引用指向的对象值引起不可变对象的内容变化】
二:replaceFirst、replaceAll、replace 区别
三:String 对“+”的重载、字符串拼接的几种方式和区别
四:String.valueOf 和 Integer.toString 的区别
五:switch 对 String 的支持
六:字符串池、常量池(运行时常量池、Class 常量池)、intern