JAVA常用类库
java.lang包包含了常用类,系统做了设置无需导包即可使用
1、Object
万类之祖:所有的类都间接或直接的继承了Object类
equals()方法
String类继承并重写了Object的equals
== 可以比较基本数据类型的值是否相同,比较引用数据类型的对象是否是同一个
public class Demo01 {
public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1.equals(s2));//true
System.out.println(s1==s2);//false
Cat c1 = new Cat("小白");
Cat c2 = new Cat("小黑");
System.out.println(c1==c2);//false
System.out.println(c1.equals(c2));//true 重写过的equals方法
Cat c3 = c1;
System.out.println(c1==c3);//true
}
}
/**
* 猫类
*/
class Cat{
private String name; //名字
/**
* 改写猫类对象的比较规则,重写Object类equals方法
* 只要猫的名字一样就为真
* @param o
* @return
*/
public boolean equals(Object o) {
Cat c = (Cat) o;//向下转型
//比较猫的名字
return this.name.equals(c.name);
}
/*
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cat cat = (Cat) o;
return Objects.equals(name, cat.name);
}
*/
@Override
public int hashCode() {
return Objects.hash(name);
}
public Cat() {
}
public Cat(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
hashCode()方法
获取对象在堆内存的地址位置叫哈希码
toString()方法
toString方法默认拼接的对象首地址的@符号后的16进制数字就是hashCoe()哈希码
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
重写toString就可以改写打印输出对象的内容
toString()不写,默认就调用
//Dog类
class Dog{
private String name;
public Dog() {
}
public Dog(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
2、String
是字符串常量,一旦创建不可改变
//源码
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
被final修饰,String类不能被继承
字符串值本质存在private final char value[];
用法和使用:参考JDK1.8API中文文档
3、可变字符串
String:字符串常量,一旦创建不可改变,线程不安全
StringBuffer:可变字符串,创建仍然可以改变,线程安全(数据在多个线程中同步)
StringBuilder:可变字符串,创建仍然可以改变,线程不安全(数据在多个线程中不同步)
用法和使用:参考JDK1.8API中文文档
4、包装类
包装类是为了将八种基本数据类型转为引用类型的形态
基本 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
基本数据可以和包装类自动转换:
装箱(基本数据->包装类对象)和拆箱(包装类对象->基本数据)