char
Java 的 char 字符是两个字符采用的是 Unicode 编码可以表示中文
char 可以和 int,short,long 整型进行类型的相互装换, 这是应为它们的本质上都是以二进制整型的形式进行存储的, 但是在转换的过程中需要注意长度不同所造成的数据丢失.
String
str1=new String("abc") 与 str2="abc"
str1==str2 是 false
str1.equse(str2) 是 true
对象常量池
从 Java5.0 开始, Java 虚拟机在启动时会实例化 9 个对象池. 分别用来存储 8 种基本类型的包装类对象和 String 对象, 主要是为了效率问题. 理解对象池的概念和字符串对象池的作用是很重要的, 因为只用这用才能真正的灵活使用字符串数据.
***
str1="abc" 是先检查常量池中有没有相等的对象, 若没有则在常量池中创建一个对象 "abc" 再将常量池对象的地址赋给 str1 若用则直接将地址赋给 str1, 而 new String("abc") 是先检查常量池中有没有相等的对象, 若没有则在常量池中创建一个对象 "abc", 再在堆区中创建一个 "abc" 的对象若有则直接常见一个 "abc" 的对象.
***
对象池是为了避免频繁的创建和销毁对象而影响系统性能. 当 JVM 在运行用双引号引起来一个字符串的代码时, 会到 String 的对象池中去检查是否有一个字符序列相同的对象. 如果有, 就取现成的对象, 如果没有, 则在对象池中创建一个对象, 并返回.
***
若有大量的字符串拼接采用 Stringbuffer 和 StringBuilder 可以避免大量的对象的创建
StringBuffer 不是线程安全的
StringBuilder 是线程安全的
StringBuffer.reverse() 字符串翻转
借鉴 java 程序员面试宝典
来源: http://www.bubuko.com/infodetail-3093431.html