一.常用类之Object类
1.toString方法
返回对象的字符串表示形式,结果应该是一个更容易让人读懂的信息表达式(建议所有的子类都覆盖这个方法)
几乎Java所有类都会重写toString()方法
操作方法:idea--->alt+ins---->toString
2.HashCode方法
获取对象的hash码值--->支持散列表(支持key-value键值对)
理解为地址值",不是真实地址值,每一个对象的hash码值不同
操作方法:idea--->alt+ins---->hashCode
3.equals方法
比较两个对象的成员信息是否都相同
public boolean equals(Object obj):指定其他对象与此对象是"相等"
==和equals()方法区别?
==:比较两个基本类型,数据值是否相等
==:连接是两个引用类型,比较的是地址值是否相等
而Object的equals方法,默认比较的是两个引用类型的地址值是否相等,建议子类需要重写这个equals(),重写之后比较的是
两个对象的成员信息是否相同!(Java中所有类都会重写!) ,重写equals方法,必须同时重写hashCode()方法
重写equals:比较每一个对象的成员信息是否相同 如果一样,还要比较每一个成员信息 hashCode()哈希码值是否一样,如果都相同
系统认为这个两个人是一样的!
操作方法: alt+ins--->equals and hashcode方法
import java.util.Objects; class Test4{ public static void main(String[] args) { Student s=new Student("jiajai",23); Student s1=new Student("jiajai",23); System.out.println(s.toString()); System.out.println(s.hashCode()); System.out.println(s.equals(s1)); } } class Student extends Object{ 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 + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && name.equals(student.name); } @Override public int hashCode() { return Objects.hash(name, age); } }
4.Clone克隆方法
Object的克隆方法
protected Object clone() throws CloneNotSupportedException 创建对象并返回它的"副本"
方法里面本身就会带有CloneNotSupportedException:克隆不支持的异常(当要对某个Object的类进行克隆
如果这个类不能实现cloneable接口,那么就会出现这个异常)
5.String 类
面试题:
String s = new String("hello") ;
和String s = "hello" ; 有什么区别?分别创建了几个对象?
区别
前者:在堆内存中开辟空间,然后字符串值常量---指向常量池, 两个对象
后者:推荐的方式,直接常量赋值,直接在常量池中找,有就返回地址,没有,开辟常量空间!
* String类: 这个类final修饰不能被继承
* 字符串是不变; 它们的值在创建后不能被更改(字符串是一个常量,存储在常量池中)
*
* 构造方法:
* public String():空字符串 类似于 String s = "" ;
* public String(String original):构造一个字符串对象,里面指定一个字符串常量值
* public String(byte[] bytes) :使用平台默认字符集(idea默认utf-8)解析解码--->字节数组--->字符串
* String(byte[] bytes, int offset, int length) :将一部分字节数组构造成字符串
* public String(char[] value):将字符数组---构造成String
* public String(char[] value,int offseet,int len):将一部分字符串数组构造成字符串
*
*
*
*面试题:
* 数组中没有length(),字符串有没有length(),集合中有没有length()?
* 数组 没有length(),length属性 数组对象.length
* 字符串有length(),
* 集合没有,获取集合中 元素数 size()
*
*/
* String类相关的获取功能
* 1)public char charAt(int index) :获取指定索引处的字符
* 2)int length():获取字符串的长度
* 3)public String concat(String str)拼接功能-- 将一个字符串拼接到指定字符串的后面(末尾追加)
* 4)public String substring(int beginIndex):截取--->从指定位置开始截取,默认截取到末尾结束!
* public String substring(int beginIndex, int endIndex) 截取--->从指定位置开始截取到指定位置结束
* 包前不包后(包含第一个位置,不包含最后一个位置,只能取到endIndex-1处)
* 5)public String[] split(String regex):拆分(分割) ,按照指定的分割符将字符串拆分成字符串数组
* String类的转换功能
* 1)char[] toCharArray() 将字符串转换成字符数组
* 2)byte[] getBytes() 平台默认字符集编码(String--->byte[]) 和
* byte[] getBytes(String charset):指定的字符集进行编码
* String(byte[] bytes) :(bytes[]--->String ) 平台默认字符集解码
* String(byte[] bytes,String charset) :(bytes[]--->String ) 指定字符集解码
*
* 3)public String toLowerCase():将字符串转换成小写
* public String toUpperCase():将字符串转换成大写
*
* 4)万能方法: 可以将任何数据类型---->String
* public static String valueOf(int i/float....Object)
*
* 编码和解码必须一致,否则乱码!
*/