Object类

Object概述

  • Object类是超类,基类,所有类都默认直接继承Object类。

  • Object类中定义的方法,是所有对象都具备的方法。

  • Object类可以存储任何类

​ - 可以作为对象的形式参数

​ - 可以作为对象的返回值

getClass()方法

  • public final Class<?> getClass(){}
  • 返回的是引用中存储的实际对象类型
  • 通常用于比较两个引用中的实际存储对象类型是否一致。

示例如下:

public static void main(String[] args) {

    Student liming = new Student("Liming", 30);
Student zhang = new Student("Zhang", 28); //判断liming和zhang是不是一个类型
Class<? extends Student> aClass = liming.getClass();
Class<? extends Student> aClass1 = zhang.getClass(); if (aClass == aClass1){
System.out.println("同一个类型");
}else {
System.out.println("不是同一个类型");
}
/** 同一个类型 **/ } public class Student { private String name;
private int age; public Student() {
} public Student(String name, int age) {
this.name = name;
this.age = age;
} }

hashCode()方法

  • 返回一个对象的哈希码值。
  • 哈希值是根据对象的地址或字符串或数字使用hash算法算出来的int型整数。
  • 一般相同对象返回相同的哈希码。

示例如下:

public static void main(String[] args) {

    Student liming = new Student("Liming", 30);
Student zhang = new Student("Zhang", 28); //hashCode方法
System.out.println(liming.hashCode());//输出:460141958
System.out.println(zhang.hashCode());//输出:1163157884 Student s1 = liming;
System.out.println(s1.hashCode() == liming.hashCode()); //true
} public class Student { private String name;
private int age; public Student() {
} public Student(String name, int age) {
this.name = name;
this.age = age;
} }

toString()方法

  • public String toString(){}

  • 返回对象的字符串表示

  • 子类可以覆盖该方法。

示例如下:

public static void main(String[] args) {

    Student liming = new Student("Liming", 30);
Student zhang = new Student("Zhang", 28); System.out.println(liming.toString());
System.out.println(zhang.toString());
/** 输出:
Student{name='Liming', age=30}
Student{name='Zhang', age=28} **/ } public class Student { private String name;
private int age; public Student() {
} public Student(String name, int age) {
this.name = name;
this.age = age;
} @Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

equals()方法

  • public boolean equals(Object obj){}
  • 默认实现为(this == obj),比较两个对象地址是否相等。
  • 子类可以重写覆盖比较值。

示例如下:

public static void main(String[] args) {

    Student liming = new Student("Liming", 30);
Student zhang = new Student("Zhang", 28); Student s1 = new Student("Liming", 30); System.out.println(liming.equals(zhang));//false
System.out.println(liming.equals(s1));//true } public class Student { private String name;
private int age; public Student() {
} public Student(String name, int age) {
this.name = name;
this.age = age;
} @Override
public boolean equals(Object o) { if (this == o) //先比较地址
return true;
if (o == null) //再判断是否为空指针
return false;
if (o instanceof Student) { //是否是Student原型链上的类,如是,则比较属性;不是,判定为false
Student student = (Student) o;
return age == student.age &&
name.equals(student.name);
}
return false; } @Override
public int hashCode() {
return Objects.hash(name, age);
}
}

finalize()方法

  • 当对象被判断为垃圾对象时,JVM自动调用此方法,用于标记垃圾对象,进入回收队列。
  • 垃圾对象:当没有有效引用指向该对象时,判断为垃圾对象。
  • 垃圾回收:由CG销毁该对象,释放数据存储空间。
  • 自动回收机制:JVM内存耗尽时,一次性回收所有垃圾对象。
  • 手动回收机制:使用System.gc();通知JVM执行垃圾回收。

类可以重写该方法在对象被JVM垃圾回收时输出一些语句。

System.out.println(this.name + "被回收了");

注:finalize()方法在Java9后被弃用。

包装类

包装类概述

  • 包装类是基本类型所对于的引用数据类型。

    • 八种基本类型都有包装类,其中char的包装类为Character类。

基本类型与包装类之间的类型转换

拆箱与装箱

  • 装箱:把基本类型转为引用类型
  • 拆箱:把引用类型转为基本类型

抽象类父类Number类下有六大子类

Integer、Double、Float、Byte、Short、Long

使用包装子类实现的Number类中抽象方法intValue()、doubleValue()等等进行拆箱

使用包装类的构造方法或者类中的valueOf(基本类型值)实现装箱

自动拆箱和自动装箱

在jdk1.5之后,我们能够使用等号直接进行类型转换

示例如下:

Integer i1 = 10;//自动装箱
int i2 = i1;//自动拆箱
  • 自动拆箱和自动装箱的原理:编译器在编译时自动调用valueOf()和intValue()方法进行装箱和拆箱。

注意:Integer比较两种包装类中的值是否相等时,最好使用equals()方法,如果使用==,则可能会出错。(其他精度要求高的包装类不会存在缓冲池)

原因如下:在使用valueOf()装箱后的Integer类,如果基本类型的值在-128到127之间,则方法会返回整数缓存区中的对象,这样进行比较的就会是同一个对象,比较相同的值的话,就会是true。如果在这个范围之外,那么就会直接使用new关键字创建新的对象,相同的值进行比较则会是false。

parseXxx()方法的使用

使用包装类的静态方法parseXxx()可以把字符串转换为对于数字类型。

示例如下:

String s1 = "150";
int i1 = Integer.parseInt(s1);
String s2 = Integer.toString(i1);

String类

String类概述

  • 字符串是常量,创建之后不能改变。
  • 字符串字面值存储在字符串池中,可以共享。

示例如下:

String str = "hello";
str = "hh";

str存储hello字符串的地址,位置在栈中;"hello"则被放在方法区的字符串常量池中。修改变量str的值,会在方法区中重新创建一个字符串hh,修改str地址指向hh,hello会被JVM标记为垃圾对象。

String str1 = new String("java");

使用new关键字创建字符串对象,java字符串字符串常量池中创建一个对象,同时在堆中创建一个对象,指向字符串常量池的地址。而栈中str1存储的地址是堆中的地址。

注意:在JDK6以及之前的版本,字符串常量池是在方法区中,但是在JDK7之后,字符串常量池被移到堆中。

String类常用方法总结

  • public int length():返回字符串的长度。

  • public char charAt(int index) :根据下标获取字符。

  • public boolean contains(String str) :判断当前字符串中是否包含str。

  • public char[] toCharArray() :将字符串转换成char数组。

  • public int indexOf(String str,[int beginFindIndex]):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。

  • public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。

  • public String trim():去掉字符串前后的空格。

  • public String toUpperCase():将小写转成大写。

  • public boolean endWith(String str):判断字符串是否以str结尾。

  • public String replace(char oldChar, char newChar):将旧字符串替换成新字符串。

  • public boolean equals(String anotherString):比较字符串内容是否相等。

  • public boolean equalsIgnoreCase(String anotherString):忽略大小写比较字符串内容是否相等。

  • public int compareTo(String anotherString):比较字符串内容的ASSIC码值大小,并且返回的整数值的公式是(this-anotherString)。

  • public String[] split(String str):根据str(内容可以是正则表达式)做拆分成String数组。

  • public String subString(int beginIndex,[int endIndex]):得到字符串的子串。

StringBuffer和StringBuilder

  • StringBuffer:可变长字符串,JDK1开始提供,运行效率慢,线程安全。

    • 先开辟一个缓冲区,之后在缓冲区中操作。

    • 比String效率高,而且更节省内存。

    • 常用方法如下:

​ 1. append(String str);在末尾添加str

​ 2. insert(int offset,String str);在offset下标处插入str

​ 3. reverse();反转字符串内容

​ 4. replace(int startIndex,int endIndex(不包含该下标),String str);替换从下标startIndex到endIndex-1的字符串为str

​ 5.delete(int startIndex,int endIndex(不包含该下标));删除从下标startIndex到endIndex-1的字符串

  • StringBuilder:可变长字符串,JDK5开始提供,运行效率快,线程不安全。

    • 常用方法与StringBuffer一样。

看bilibili千锋教育后的一些小白笔记与总结。边学习边成长。欢迎在文章下探讨~~

了解狂神说在以下链接:https://space.bilibili.com/146668655

最新文章

  1. Linux下使用NMON监控、分析系统性能
  2. yii2 GridView常见操作
  3. dijkstra 最短路算法
  4. fiddler,https抓包设置
  5. Partran,Nastran和ANSYS的区别
  6. [swustoj 243] 又是一年CET46
  7. AutoCompleteTextView使用 监听
  8. linux下mysql命令
  9. 为什么要设置Java环境变量(详解)
  10. 东软实训1 -jsp内置对象及其常用方法
  11. .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
  12. C机器级移位,编码表示 无符号编码表示,有符号编码表示一般最常见的方式是补码
  13. Nacos系列:欢迎来到Nacos的世界!
  14. MySQL 内置函数
  15. bzoj2961 共点圆 bzoj 4140
  16. drone的pipeline原理与代码分析
  17. 潭州课堂25班:Ph201805201 django框架 第六课 模型类增删改查,常用 的查询矣查询条件 (课堂笔记)
  18. angular7 Rxjs 异步请求
  19. python标准库 - 数学库和随机数库
  20. flask 中文编码解码

热门文章

  1. vue学习笔记(一) ---- vue指令(v-for 和 key 属性)
  2. Node.js学习笔记-----day05 (使用MongonDB重写学生信息管理案例)
  3. 以交互的方式升级ESXi主机
  4. org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter异常
  5. Spring Cloud Openfeign Get请求发生405错误
  6. JavaScript是怎样实现继承的?
  7. LG P4213【模板】杜教筛(Sum)
  8. JZOJ 2474. 【GDKOI 2021普及组DAY2】我的世界
  9. redis(4)String字符串
  10. Avalonia 实现平滑拖动指定控件