Object类
如果定义⼀个Java类时没有使⽤extends关键字声明其⽗类,则其⽗类默认为 java.lang.Object 类
equals方法
当一个类中没有重写equals方法时,则调用从Object类中继承下来的版本,默认比较两个对象的地址
为了比较两对象中的内容,需要重写equals方法
当调用对象和参数对象的地址相同时,则内容一定相同
当参数对象为空时,则内容一定不相同
若参数对象和调用对象类型不一致时,则内容一定不相同
hashCode方法
当一个类中没有重写hashCode方法时,则调用从Object类中继承下来的版本,获取调用对象的哈希码值(内存地址编号)
若两对象调用equals方法相同,则各自调用该方法的结果必须相同
若两对象调用equals方法不相同,则各自调用该方法的结果不相同
toString方法
获取调用对象的字符串形式;
当一个类中没有重写equals方法时,则调用从Object类中继承下来的版本,默认格式:包名.类名@哈希码值的十六进制
为了返回更有意义的数据,需要重写该方法
使用print或pringln会自动调用该方法
拆箱
实现了从Integer类型到int类型的转换
装箱
实现了从int类型到Integer类型的转换
-128~127地址一样,不需要装箱,使用池中已有的数据即可
使用字符串向整数的转换
Integer.parseInt(“12345”)
Math类的概述
static修饰,表示类层级,直接通过类名.方式调用即可
Random random = new Random();
random.nextInt(100) 随机生成0~99之间的整数
random.nextInt(100)+1 随机生成1~100之间的整数
String
String类用于描述字符串
String由final关键字修饰,表示该类不能被继承
从Java9开始该类底层不再使用char[]来存储数据,而是改成byte[]加上编码标记的方式,从而节约了一些空间
该类描述的字符串内容是个常量不可更改,因此可以被共享使用
例如:String str = “abc”;
str = “123” 其中abc这个字符串是个常量不可改变,将123字符串的地址赋值给str,改变str的指向,并没有改变指向的内容
常量池
由于String类型描述的字符串内容是常量不可改变,因此Java虚拟机将⾸次出现的字符串放⼊常量池,若后续 代码中出现相同字符串内容则直接使⽤池中已有的字符串对象⽽⽆需申请内存及创建对象,从⽽提⾼了性能
考点1:
string str = “abc” 创建了一个对象,在常量池中
String str = new String(“abc”) 创建了两个对象,一个在常量池,一个在堆中
考点2:
String s1 = "good";
String s2 = "go" + "od";
System.out.println(s1.equals(s2)); //true
System.out.println(s1 == s2); //true
编译阶段常量优化机制,直接合并为字符串“good”
String s1 = "good";
String s2 = "go" + "od";
System.out.println(s1.equals(s2));
System.out.println(s1 == s2);
String s3 = "go";
String s4 = s3 + "od";
System.out.println(s1.equals(s4)); //true
System.out.println(s1 == s4); //false
有变量存在时,没有优化机制
常⽤的构造⽅法
//1.无参构造方法创建对象
//String string = new String();
String string = "";
//"" 表示有字符串对象,只是对象中没有内容而已
//null 表示连字符串对象都没有
System.out.println(string);
System.out.println("-----------------------------");
//2.使用字节数组进行创建对象
byte[] bytes = {97,98,99,100};
String s1 = new String(bytes);
String s2 = new String(bytes,0,2);
System.out.println(s1);
System.out.println(s2);
System.out.println("-----------------------------");
//3.使用字符数组创建对象
char[] chars = {'h','e','l','l','o'};
String s3 = new String(chars);
String s4 = new String(chars,0,2);
System.out.println(s3);
System.out.println(s4);
.getBytes() 将当前字符串内容转换为byte数组并返回
.toCharArray() ⽤于将当前字符串内容转换为char数组并返回
.charAt(int index) ⽤于返回字符串中指定位置的字符
.length() 返回字符串中字符序列的⻓度
.isEmpty() 判断字符串是否为空
考点:
如何实现字符串类型到整数类型的转换?
使用Integer类中的parseInt方法即可
如何实现整数到字符串类型的转换?
调用String类中的valueOf方法
字符串连接 “”+数字
推荐使用常量去调用equals方法,避免发送空指针异常(常量调用equals肯定不会发送空指针异常)
可变字符串类
由于String类描述的字符串内容是个常量不可改变,当需要在Java代码中描述⼤量类似的字符串时,只能单独申请和存储,此时会造成内存空间的浪费。
为了解决上述问题,可以使⽤java.lang.StringBuilder类和java.lang.StringBuffer类来描述字符序列可以改变的字符串,如:"ab"。
StringBuffer类是从jdk1.0开始存在,属于线程安全的类,因此效率⽐较低。
StringBuilder类是从jdk1.5开始存在,属于⾮线程安全的类,效率⽐较⾼。
StringBuilder类常⽤的构造⽅法
.capacity() 调用对象的容量
.length() 实际字符串的⻓度
System类
.currentTimeMillis() 返回当前时间与1970年1⽉1⽇0时0分0秒之间以毫秒为单位的时间差
Date类
描述特定的瞬间,也就是年月日时分秒,可以精确到毫秒
常⽤的⽅法
获取调用对象距离基准时间的毫秒数
(省略了时间,日历,以后补)