String

  • String类代表字符串,Java程序中所有字符串文字(例如“abc”)都被实现为此类的实例,也就是说,Java程序中所有的双引号字符串,都是String类的对象

  • 字符串不可变,他们的值在创建后不能被更改

  • 使用双引号创建字符串对象和使用new创建字符串对象的区别

    1. 使用双引号创建字符串对象时,系统检查该字符串是否存在于字符串常量池中,如果不存在则创建,如果存在则复用
    2. 使用new来创建字符串对象,每一次new都会申请一个内存空间,虽然字符串内容相同,但是地址值不同
    3. 双引号创建的字符串对象在字符串常量池中存储,构造方法创建的字符串对象在堆内存中存储

==

  • ==用于比较基本数据类型时,比较的是内容
  • ==用于比较引用类型时,比较的是地址

比较地址

1
2
3
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // 比较地址,输出true
1
2
3
String s1 = "abc";
String s2 = new String("abc"); // 使用构造方法创建字符串对象
System.out.println(s1 == s2); // 比较地址,输出false
1
2
3
4
5
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c";
/*这里系统自动创建StringBuilder对象,然后再调用append()方法完成拼接,最后调用toString()方法转换为String类型*/
System.out.println(s1 == s3); // 比较地址,由于创建新的对象,输出false
1
2
3
4
5
String s1 = "abc";
String s2 = "ab";
String s3 = "ab" + "c";
/*使用常量优化机制,当拼接的字符串均是双引号创建的字符串对象时,不会创建新的对象*/
System.out.println(s1 == s3); // 比较地址,没有创建新的对象,输出true
  1. 使用 equals() 方法来比较内容,严格区分大小写,返回true或者false
  2. 如果比较字符串时需要忽略大小写,则可以使用 equalsIgnoreCase() 方法

StringBuilder

  • StringBuilder是一个可变的字符串类,可以将它看成一个容器
  • StringBuilder可以提高字符串操作效率,体现在字符串拼接上
方法 介绍
append 完成字符串拼接,返回值是自己本身
reverse 返回相反的字符串序列
toString 把StringBuilder类型转为String类型

Math

有关数学运算的类,构造方法被私有化所以不能被实例化,提供的方法全是静态方法

方法名 说明
abs(int a) 返回参数的绝对值
ceil(double a) 向上取整
floor(double a) 向下取整
round(float a) 四舍五入
max(int a,int b) 返回两个参数值最大的
min(int a,int b) 返回两个参数值最小的
pow(double a,double b) 返回a的b次幂的值
random() 返回值为double类型的正值,[0.0,1.0)

System

与系统相关的类,构造方法私有化所以不能被实例化,提供的方法都是静态方法

方法名 说明
exit(int status) 终止当前运行的Java虚拟机,参数非零表示异常终止
currentTimeMillis() 返回当前距离1970年1月1日 00:00:00的毫秒值
arraycopy(源数组,起始索引,目的数组,起始索引,拷贝个数) 数组copy

Object

  • 所有类的超类,所有的对象(包括数组)都实现这个类中的方法

  • toString()方法

    1. 直接打印一个对象就是打印这个对象的toString()方法的返回值
    2. Object类的toString()方法得到的是这个对象的字符串表示全类名+@+哈希值的十六进制
    3. 一般情况下会对toString()方法进行重写,建议所有子类都重写该方法
  • equals()方法

    1. 与另一个对象比较
    2. 默认是比较地址
    3. 重写可以比较内容,例如String类和Integer类
1
2
3
4
5
6
String s1 = "abc";
StringBuilder sb = new StringBuilder("abc");
// 1.使用String中的equals()方法比较时会先判断参数是否是String类再判断内容,如果不是则直接返回false
System.out.println(s1.equals(sb)); // false
// 2.由于StringBuilder没有重写equals()方法,所以比较的是地址值
System.out.println(sb.equals(s1)); // false

BigDecimal

两种构造方法

  • BigDecimal bd1 = new BigDecimal(数值参数);
  • BigDecimal bd2 = new BigDecimal(字符串);

四则运算(精确)

方法名 说明
add(BigDecimal b) 加法
subtract(BigDecimal b) 减法
multiply(BigDecimal b) 乘法
divide(BigDecimal b) 除法

一种特殊的方法

  1. 语法:public BigDecimal divide(参数1,参数2,参数3);
  2. 用于D除不尽的情况
  3. 参数1表示另一个参与运算的数,参数2表示小数点后精确到的位数,参数3表示舍入模式
  4. 舍入模式有
    • BigDecimal.ROUND_UP,进一法
    • BigDecimal.ROUND_FLOOR,去尾法
    • BigDecimal.ROUND_HALF_UP,四舍五入

总结

  1. BigDecimal用于精确计算
  2. 创建BigDecimal对象,构造方法使用参数类型为字符串的
  3. 除法除不尽使用三个参数的方法

包装类

八个包装类

基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

注意:在使用包装类型时如果有对应的操作,最好先判断是否为空

日期时间

  • 计算机中的时间原点是1970年1月1日 00:00:00

Date

构造方法

方法名 说明
Date() 创建一个Date对象,表示默认事件(计算机当前时间)
Date(long date) 创建一个Date对象,表示指定时间(从时间原点开始,过了指定毫秒的时间,需要考虑时差问题)

常用方法

方法名 说明
getTime() 获取时间对象的毫秒值
setTime(long time) 设置时间为参数内指定的时间

SimpleDateFormat

  • 可以对Date对象进行格式化和解析

常用模式字母以及对应关系

字母 含义
y
M
d
H
m
s

构造方法

方法名 说明
SimpleDateFormat() 构造一个默认格式的对象
SimpleDateFormat(String pattern) 构造一个指定格式的对象

格式化和解析的方法

方法名 说明
public final String format(Date date) 将日期格式化为指定格式的字符串
public Date parse(String source) 将字符串解析为日期类对象

JDK8新增的时间日期类

  • LocalDate日期类、LocalTime时间类、LocalDateTime时间日期类,使用方法类似

LocalDateTime创建方法

方法名 说明
public static LocalDateTime now() 获取当前计算机的时间
public static LocalDateTime of(年,月,日,时,分,秒) 使用指定的年月日时分秒创建一个对象

LocalDateTime的格式化和解析

方法名 说明
public String format(指定格式) 将LocalDateTime对象格式化为指定的字符串
public static LocalDateTime parse(待解析的字符串,解析格式) 将时间日期字符串解析为LocalDateTime对象