API(API: Application(应用) Programming(程序) Interface(接口))
Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。
Object类
Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。
Object类---equals()方法
equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。
在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较
例如:判断两个人是否是同龄人
class Person extends Object{
int age ;
public boolean equals(Object obj) { //子类重写equals方法
if(this == obj){ //判断传入得对象和本来的是不是同一个
return true;
}
if(!(obj instanceof Person)){ 转型之前先对类型进行判断
return false;
}
Person p = (Person)obj; //向下转型
return this.age == p.age;
}
}
Object类----toString()方法
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
String类
查看源码得知字符串实质就是一个字符型的数组
面试题:String s1=new String("hello"); 和String s2 ="hello";的区别
s1创建时,在内存中有两个对象,一个new的对象在堆中,一个是字符串本身的对象,在字符串常量池中。
s2创建时,在内存中只有一个对象,在字符串常量池中。
注:在jdk1.6之前,字符串常量池在方法区内,在jdk1.7之后,字符串常量池在堆中。
若System.out.println(s1==s2); //false
System.out.println(s1.equals(s2)); //true
当s2创建时,String类的数据会首先进入堆中的常量池中,并给该值赋一个地址值。
当s1创建时,new String会首先在堆中开辟一个内存空间,进而给字符串s1赋值时,会先在字符串常量池中搜索是否有该值,有的话就把字符串常量池中的地址值存到开辟的内存空间,并给该内存空间赋一个新的十六位地址,传递给s1.
String类的构造方法
String常用方法
获取字符串的长度
获取部分字符串
substring(int beginIndex) 截取字符串时从开始位置截取,截取到末尾
substring(int beginIndex,int endIndex) 截取字符串从开始位置截取,到终点位置,但是不包括终点位置的字符。
查找字符串
字符串是否以指定字符串开头
字符串中是否包含另一个字符串
String str = "abcde";
int index = str.indexOf(“bcd”); //判断是否包含指定字符串,包含则返回第一次出现该字符串的索引,不包含则返回-1
boolean b2 = str.contains("bcd");//判断是否包含指定字符串,包含返回true,不包含返回false
将字符串转成一个字符数组。或者字节数组
判断两个字符串中的内容是否相同
l 获取该字符串对象中的内容
字符串缓冲区
字符串缓冲区支持可变的字符串,StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,可以改变该序列的长度和内容。
StringBuilder和StringBuffer时兼容的API,二者用法相同,前者运行较快,但是线程不安全;后者线程安全,但是运行较慢。目前优先考虑前者。
常用方法: