java基础之常用类Object,包装类
-常用类
Object
-
最大父类,也称为祖宗类. 所有类都直接或间接的继承自Object
常用方法
-
Class getClass() : 获取引用的实际对象类型
Animal a1 = new Dog(); ? ? ? ?Animal a2 = new Cat(); ? ? ? ?Dog dog = new Dog(); ? ? ? ?//获取实际对象类型 ? ? ? ?System.out.println(a1.getClass());//com.by.entity.Dog ? ? ? ?System.out.println(a2.getClass());//com.by.entity.Cat ? ? ? ?//判断a1和a2是否相同 ? ? ? ?System.out.println(a1.getClass() == a2.getClass());//f ? ? ? ?System.out.println(a1.getClass() == dog.getClass());//t
-
int hashCode() : 获取当前对象的哈希码值
-
重写原因: 该方法默认关注对象地址,地址不同则哈希码值不同. 但是开发过程中某些情况下我们需要关注的是对象内容,内容一致则哈希码值必定一致,所以需要对其重写
-
重写规则:
-
整型: 直接相加
-
小数类型: 强转int后相加
-
引用类型:
属性名.hashCode()
相加-
类库中的引用类型: 该方法已经提供过重写,所以直接调用方法即可
-
自定义的引用类型: 需要先将自定义类型的该方法重写,再进行调用
-
-
-
-
boolean equals(Object o): 判断当前对象与参数对象是否相同
-
重写原因: 该方法默认比较对象地址,但是在开发过程中,某些情况下需要比较双方内容,所以需要提供重写
-
重写规则:
public boolean equals(Object o) { ? ? ? ?//自反性 ? ? ? ?if (this == o) { ? ? ? ? ? ?return true;//自己和自己比,一定相同 ? ? ? } ? ? ? ?//非空判断 和 类型比较 ? ? ? ?if (o == null || this.getClass()!=o.getClass()) { ? ? ? ? ? ?return false;//与null值比或者实际对象类型不一致,一定不同 ? ? ? } ? ? ? ?//类型强转 ? ? ? ?当前类名 引用名 = (当前类名) o; ? ? ? ?//比较属性值 ? ? ? return 让当前对象的属性与引用名的属性进行比较,多个属性值之间的比较&&连接; ? }
-
比较属性值:
-
基本类型: ==直接比较
-
引用类型:
-
类库中的引用类型: 对equals已经提供过重写,所以可以直接调用
-
自定义的引用类型: 对自定义类型中的equals也进行重写,然后调用
-
-
package com.by.entity; ? ? public class Student { ? ?private String name; ? ?private int age; ? ?private double score; ? ?private Teacher tea; ? ? ? ?@Override ? ?public int hashCode() { ? ? ? ?return age+(int)score+name.hashCode()+ tea.hashCode(); ? } ? ? ?public boolean equals(Object o) {//Object o=new Student(); ? ? ? ?//自反性 ? ? ? ?if (this == o) { ? ? ? ? ? ?return true;//自己和自己比,一定相同 ? ? ? } ? ? ? ?//非空判断 和 类型比较 ? ? ? ?if (o == null || this.getClass()!=o.getClass()) { ? ? ? ? ? ?return false;//与null值比或者实际对象类型不一致,一定不同 ? ? ? } ? ? ? ?//类型强转 ? ? ? ?Student s = (Student) o; ? ? ? ?//比较属性值 ? ? ? return this.age==s.age && this.score==s.score && this.name.equals(s.name) && this.tea.equals(s.tea); ? ? } ? //省略getter\setter\构造 } ? package com.by.entity; ? public class Teacher { ? ?private String name; ? ? ?public int hashCode(){ ? ? ? ?return name.hashCode(); ? } ? ? ?public boolean equals(Object o) { ? ? ? ?//自反性 ? ? ? ?if (this == o) { ? ? ? ? ? ?return true; ? ? ? } ? ? ? ?//非空判断+类型比较 ? ? ? ?if (o == null || this.getClass() != o.getClass()) { ? ? ? ? ? ?return false; ? ? ? } ? ? ? ?//类型强转 ? ? ? ?Teacher t = (Teacher) o; ? ? ? ?//属性值比较 ? ? ? ?return this.name.equals(t.name); ? } ? ? //省略getter\setter\构造 ? }
-
-
-
String toString() : 用来返回当前对象的信息
-
重写原因: 该方法默认获取对象地址返回,但是实际开发中,通常查看的是对象的内容,所以需要重写
-
重写规则: 根据查看需求拼接属性值返回即可
-
使用:
-
在直接查看引用时可以自动调用
-
-
-
void finalize() : 用来进行垃圾回收
-
垃圾回收机制: 当内存满到不足以支撑新对象的创建时,虚拟机会调用垃圾对象的该方法对其进行回收销毁,以此来释放空间
-
垃圾对象判断标准: 没有任何引用指向的对象 (零引用机制)
-
手动垃圾回收: 可以借助垃圾回收期GC,通过在代码中书写
System.gc()
来实现手动的垃圾回收
-
包装类
-
作用为将八大基本类型包装为引用类型
byte | short | int | long | float | double | char | boolean |
---|---|---|---|---|---|---|---|
Byte | Short | Integer | Long | Float | Double | Character | Boolean |
基本类型与包装类型
基转包
-
利用构造
包装类型 引用名=new 包装类名(基本类型);
-
利用valueOf
包装类型 引用名=包装类名.valueOf(基本类型);
包转基
-
利用xxxValue
基本类型 变量名=包装类型引用名.xxxValue(); 注:xxx对应的是基本类型名
自动转换
-
JDK5.0之后,为了方便操作,提供了自动封箱与拆箱,使得基本类型与包装类型之间可以自动转换
-
封箱: 基本类型转包装类型
-
拆箱: 包装类型转基本类型
int a1=10;
? ? ? ?//1.构造
? ? ? ?Integer i1 = new Integer(a1);
? ? ? ?//2. valueOf
? ? ? ?Integer i2 = Integer.valueOf(a1);
? ? ? ?//包转基
? ? ? ?int a2 = i2.intValue();
? ? ? ?//自动转换
? ? ? ?Integer i3 = a1;
? ? ? ?int a3 = i3;
基本类型与String
基转String
-
字符串拼接
String 引用名=基本类型+""; String 引用名=""+基本类型;
-
利用valueOf
String 引用名=String.valueOf(基本类型);
String转基
-
利用parseXxx方法
基本类型 变量名=对应的包装类名.parseXxx(String类型); 注:Xxx对应的是基本类型名,首字母大写
必须包装String中的数据是基本类型能够盛放的数据,否则执行时会触发NumberFormatException数据类型转换异常
int a1 = 100;
? ? ? ?//字符串拼接
? ? ? ?String s1 = a1 + "abc";
? ? ? ?String s2 = "" + a1;
String s3=String.valueOf(a1);
? ? ? ?//String转基
? ? ? ?int a2 = Integer.parseInt(s2);
? ? ? // int a3 = Integer.parseInt(s1);//100abc 报错
包装类型与String
包转String
-
字符串拼接
String 引用名=包装类型+""; String 引用名=""+包装类型;
-
利用toString
String 引用名=包装类型引用名.toString();
String转包
与基转包一致
必须保证String的值为包装类型能够盛放的值
Integer i1 = 100;
? ? ? ?//字符串拼接
? ? ? ?String s1 = i1 + "qwe";
? ? ? ?String s2 = "" + i1;
? ? ? ?//toString
? ? ? ?String s3 = i1.toString();
? ? ? ?//String转包
? ? ? ?Integer i2 = new Integer(s2);
? ? ? ?Integer i3 = Integer.valueOf(s3);
?
? ? ? // Integer i4 = new Integer(s1); 报错
整数缓冲区
官方认定-128至127是最常用的256个数字,为了减少包装类型使用反复数字带来的空间浪费,所以在方法区中设立了整数缓冲区,用来存放这256个数字,当包装类型使用的数字在此范围内,则直接引用缓冲区地址,不再额外开辟对象空间,以此达到节省空间的目的
==比较引用类型地址时,优先使用堆中的对象地址
Integer i1 = 200;
? ? ? ?Integer i2 = 200;
? ? ? ?System.out.println(i1 == i2);//f
?
? ? ? ?Integer i3 = 100;
? ? ? ?Integer i4 = 100;
? ? ? ?System.out.println(i3 == i4);//t
?
? ? ? ?Integer i5 = new Integer(100);
? ? ? ?Integer i6 = new Integer(100);
? ? ? ?System.out.println(i5 == i6);//f
?
?
? ? ? ?System.out.println(i3 == i5);//f
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!