常用类以及部分JDK代码
[内容时间:2021.08.18]
String
关于String
- 字符串一旦创建不可变。底层是byte[] value,有final关键字 所以不可变
- 双引号括起来的字符串存储在方法区的字符串常量池中
- 字符串(引用类型)的比较必须使用equals方法
- String已经重写了toString()方法和equals()方法
- String类只有一个静态方法,就是valueOf ,作用是把不同数据的字面值转化成String字符串。
关于String的构造方法了解一下。
- String s = "";
- String s = new String("");
- String s = new String(byte数组);
- String s = new String(byte数组,起始下标,长度);
- String s = new String(char数组);
- String s = new String(char数组,起始下标,长度);
String类常用的21个方法
String字符串的存储原理
StringBuffer
底层是byte[] value,没有final关键字 所以可变
StringBuffer类型的方法append方法数组满了的话会自动扩容
如何优化StringBuffer的性能?
- 在创建StringBuffer的时候尽可能给定一个初始化容量
- 最好减少底层数组的扩容次数,预估计一些,给一个大一点的初始化容量
- 关键点:给一个合适的初始化容量,可以提高程序的执行效率
StringBuffer和StringBuilder的区别?
- StringBuffer中的方法都带有synchronized 关键字修饰,表示StringBuffer在多线程环境下运行时安全的
- StringBuffer是线程安全的,StringBuilder是非线程安全的。
基础类型对应的八个包装类
Integer
用int 类型对应的 Integer 来参考
//基本数据类型100转化成引用数据类型Integer(装箱)
Integer i = new Integer(100)
//将引用数据类型100转化成基本数据类型(拆箱)调用floatValue方法
float a = i.floatValue()
==================================================
// JDK1.5之后,支持自动拆箱和装箱
Integer x = 100;//自动装箱,int类型自动转换为Integer
int y = x;//自动拆箱,Integer类型转换成int
//还可以这样
Integer z = 1000;
System.out.println(z + 1); //输出1001,前提是在JDK5之后。这就是自动装箱和拆箱的好处之一
// ==双等号不会触发自动装拆箱机制,是比较两个引用的内存地址。加减乘除+,-,*,/ 才会触发自动拆箱机制
关于Integer类的构造方法
//可以往里面传一个数字,也可以往里面传一个字符串进行初始化
Integer y = new Integer(100);
Integer x = new Integer("123");
包装类还可以很方便的调用MAX_VALUE 常量来获取最大值和最小值
Integer重要的面试题
- 池:cache,就是缓存
- 大型项目中的重要优化手段就是:cache缓存机制,缓存机制要重视!
- 缓存 优点:效率高 缺点:耗费内存
Integer a = 128;
Integer b = 128;
System.out.println(a == b);//false
/*
java中为了提高程序的执行效率,将[-128 ~ 127]之间的所有包装对象提前创建好
放到一个方法区的 整数型常量池 当中,目的是只要用这个区间的数据就不需要new了
直接从整数型常量池当中取出来。
原理:x变量中保存的对象的内存地址和y变量中保存的对象的内存地址是一样的。
*/
Integer c = 127;
Integer d = 127;
System.out.println(c == d);//true