Java的API(Application Programming Interface)也叫应用程序接口,是JDK中提供给我们使用的类,这些类将底层代码封装起来
Object类
Object类的概述
Object
类是Java语言中的根类,是所有类的父类,它描述的所有子类方法都可以使用,所有类在创建对象时,最终找到的父类就是Object
equals 方法
equals
方法用于比较两个对象是否相同,其实就是比较两给对象的内存地址是否相同,Object
类中的equals
方法内部就是使用==
比较符
在Object类中原代码为
public boolean equals(Object obj){
return this == obj;
}
在开发中比较两个对象是否相等意义不大,通常会根据对象中的属性值进行比较,也就是在开发中需要从写equals
方法的属性进行比较
下面描述一个人的类,并定义功能判断是否为同龄人
public class Person extends Object{
private String name;
private int age;
// 无参数构造方法
public Person(){
}
// 有参数构造方法
public Person(String name, int age){
this.name = name;
this.age = age;
}
// 重写父类的equals方法
public boolean equals(Object obj){
// 判断是当前调用的equals方法的对象和传递进来的对象是否是同一个
if(this == obj){
return true;
}
// 判断是否传递进来的对象是否是Person类型
// 对obj参数进行向下转型,把obj转成Person类型
if(obj instanceof Person){
Person p = (Person)obj;
return this.age == p.age;
}
return false;
}
// getters和setters
...
}
注意:在重写Object
中的equals
方法时,public boolean equals(Object obj)
的参数是Object
类型,在调用属性时,一定要进行类型转换,在转换之前必须对类型进行判断
toString方法
toString
方法返回该对象的字符串表示,一般默认返回的该字符串的内容是【对象类型@内存地址】
由于toString
方法返回的结果是内存地址,而在实际的开发中,经常需要按照对象的属性得到相应的字符串的表达形式,因此也需要重写,比如Person
类返回name
class Person extends Object{
...
// 根据Person类的属性重写toString方法
public String toString(){
return name
}
}
String类
String类的概述
查阅API中的String
类的描述,发现String类代表的字符串,Java中的所有字符串(如“abc”)都作为此类的实例实现的
继续查阅API发现说字符串是常量,它们在的值在创建后就不能更改,这是什么意思呢?其实就是说一旦这个字符串一旦确定了,那么就会在内存区域生成这个字符串,字符本生不能改变,但str变量中的记录的地址可以改变
在String
源码中private final char value[]
定义为不可改变的数组
符串有大量的重载的构造方法。通过
String
类的构造方法可以完成字符串对象的创建,那么,通过使用双引号的方式创建对象与
new
的方式创建对象,有什么不同呢?看如下程序:
String str1 = "abc";
String str2 = new String("abc");
System.out.println(str1==str2); //false
System.out.println(str1.equals(str2)); //true
因为String
重写了equals
方法,建立了字符串自己的判断相同的依据(通过字符串对象中的字符来判断)
str1和str2的创建方式有什么不同呢?
- str1创建,在内存中只有一个对象,这个对象在字符串常量池中
- str2创建,在内存中有两个对象,一个
new
的对象在堆中,一个字符串本身对象,在字符串常量池中
String的构造方法
构造方法是用来完成String对象的创建,下面给出了一部分构造方法需要在API中找到,并能够使用下列构造方法创建对象
String类中的构造函数
-
String()
构造一个空字符串对象 -
String(byte[] bytes)
通过byte
数组构造字符串对象 -
String(byte[] bytes,int offset,int length)
通过byte
数组,从offset
开始,总共length长的字节构造字符串对象 -
String(char[] value)
通过char
数组构造字符串对象 -
String(byte[] char,int offset,int length)
通过char
数组,从offset
开始,总共length
长的字节构造字符串对象 -
String(String original)
构造一个original
的副本,拷贝一个original
-
String(StringBuffer buffer)
通过StringBuffer
数组构造字符串对象
String类的常用方法
-
length( )
查看字符串长度 -
charAt(int index)
获取字符串中的某个值 -
contains(String str)
判断一个字符串是否包含另一个字符串 -
getBytes( )
将字符串转换为字节数组 -
toCharArray( )
将字符串转换为字符数组 -
compareTo( )
比较两个字符串的大小,相等返回0,大于返回正数,小于返回负数 -
compareToIgnoreCase( )
比较两个字符串的大小,不考虑大小写 -
toUpperCase( )
、toLowerCase( )
大、小写转换 -
indexOf( )
字符串位置查找。indexOf(int ch)
:在此对象表示的字符序列中第一次出现该字符的索引;如果未出现该字符,则返回 -1。indexOf(int ch,int fromIndex)
: 在此对象表示的字符序列中第一次出现的大于或等于fromIndex
的字符的索引;如果未出现该字符,则返回 -1。 -
lastIndexOf( )
字符串位置查找,与indexOf()
查找顺序相反 -
startsWith(String str)
测试字符串以指定的前缀开始,后面还可以添加指定的索引,表示从指定的索引开始的字符串是否以指定的前缀开始 -
endsWith(String str )
测试字符串以指定的后缀结束 -
substring( )
:substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。(左包含右不包含) -
split(String regex )
根据给定正则表达式的匹配拆分此字符串。 -
trim( )
用户数据后台校验前的过滤,返回字符串的副本,忽略前导空白和尾部空白
StringBuffer类
查阅StringBuffer
的API,StringBuffer
又称为可变字符序列,它是一个类似于 String
的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
原来StringBuffer
是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
StringBuffer的方法使用
-
append(String str)
将指定字符串追加到此字符序列 -
delete(int start, int end)
移除此序列的字符串中的字符 -
insert(int offset, String str)
将字符串插入到此字符串序列中 -
replace(int start, int end, String str)
替换相应位子的字符串 -
reverse()
反转字符串 -
toString()
反回序列中数据的字符串(是String
类型)
StringBuilder类
查阅API发现还有一个StringBuilder
类,它也是字符串缓冲区,StringBuilder
与它和StringBuffer
的有什么不同呢?
我们阅读StringBuilder
的API说明发现,它也是一个可变的字符序列。此类提供一个与 StringBuffer
兼容的 API,但不保证同步。该类被设计用作 StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer
要快