阿嘉的Java日志 [第五章:JDK常用类]

109 阅读3分钟

常用类以及部分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

日期相关类

数字相关类

Random

Enum