Object
API文档: Application Promgramming Interface
如何阅读API文档?
1.看是在哪个包下
2.看是抽象类还是接口还是普通类
如果是抽象类,看子类
如果是接口,看实现类
如果是普通类,看构造方法
3.看类的描述
4.看构造方法
5.看成员方法
boolean equals(Object obj)
protected Object clone()
protected void finalize()
Class<?> getClass()
int hashCode()
String toString()
Object类的特点:
1.Object类是所有类的根类,可以利用多态创建对象
2.当一个方法的形参是Object类的时候,我们可以传入任意引用类型
3.Object满足万事万物皆对象的设计原则
4.创建任何一个类的对象都会去访问 Object 类的无参构造方法
hashCode方法
com.sxt.objectdemo01.Student@7852e922
com.sxt.objectdemo01.Student@4e25154f
com.sxt.objectdemo01.Student@70dea4e
false
false
hashCode
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。
(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
1.hashCode方法会针对不同对象返回不同的整数
2.这个返回结果是内部地质转换而来的一个整数
3.hashCode相同能保证元素相同? -- 不一定 地址相同能保证元素相同
==
比较基本数据类型 比的是数值本身
比较引用类型 比较的是真实地址
注意: 两个对象的hashCode相同,不能够保证两个对象是同一个对象
## Class<?> getClass()
字节码文件也是一个对象
类是用来描述事物的一个概念,概念本身使用Class类来描述
Class里面保存了一个类的所有信息: 成员变量,成员方法,构造方法…
s1.getClass().getName()返回的是类名的全路径
boolean isEmpty():判断字符串是否为空。
boolean equals(Object obj):将此字符串的内容与指定的对象比较,区分大小写。
boolean equalsIgnoreCase(String str):将此 String 与另一个 String 比较,忽略大小写。
boolean contains(String str):判断字符串中是否包含方法传入的字符串。
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头。
boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾。
byte[] getBytes() :将字符串转化为字节数组。
char[] toCharArray(): 将字符串转化为字符数组。
static String valueOf(char[] chs): 返回 char 数组参数的字符串表示形式。
static String valueOf(int i) :返回 int 参数的字符串表示形式。
String toLowerCase() :将此 String 中的所有字符都转换为小写。
String toUpperCase() :将此 String 中的所有字符都转换为大写。
String concat(String str): 将指定字符串连接到此字符串的结尾。
String replace(char old,char new) :替换功能。
String replace(String old,String new) :替换功能。
String trim():去除字符串两空格。
int compareTo(String str) :按字典顺序比较两个字符串。
int compareToIgnoreCase(String str):按字典顺序比较两个字符串,忽略大小写。
public String[] split(String regex):分隔字符串成字符数组。
什么是缓冲区? --> 本质就是数组
为什么需要缓冲区?
可以提高效率,减少每次创建对象消耗的时候,减少内存占用
池的设计
初始容量
最大容量
增量
最大空闲数
最小空闲数
等待时间
字符串缓冲区
字符串池
字符流缓冲池 数据库连接池 线程池…
StringBuffer
StringBuffer() :构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。
StringBuffer(CharSequence seq):构造一个字符串缓冲区,它包含与指定CharSequence 相同的字符。
StringBuffer(int capacity) :构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
StringBuilder类
线程安全,同步,效率低 StringBuffer
线程不安全,不同步,效率高 StringBuilder
举例:
1.买票 安全
2.访问网站 发送请求请求 index.html 效率
3.WC 小的 大的
三者的区别 String StringBuffer StringBuilder
二者是完全兼容的,二者都是字符串缓冲区,支持可变的字符串操作
线程安全,同步,效率低 StringBuffer
线程不安全,不同步,效率高 StringBuilder
String 长度不可变,线程不安全,效率高
1.String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
2.字符串是常量;它们的值在创建之后不能更改。
3.所有的常量在内存的方法区的常量池中
4.频繁的字符串拼接操作会导致常量池容器增加,浪费内存资源
5.字符串缓冲区【StringBuffer,StringBuilder】支持可变的字符串
6.Java在编译时期会针对字符串的拼接操作使用StringBuilder改进,提高效率,节约内存资源
s = (new StringBuilder(String.valueOf(s))).append(“efg”).toString();
System.out.println((new StringBuilder(“s:”)).append(s).toString());
7.因为 String 对象是不可变的,所以可以共享
8.字符串本质是字符数组
存储:
StringBuffer append(数据);//将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(int offset,数据);//可以将数据插入到指定offset位置。
删除:
StringBuffer delete(int start,int end);//删除缓冲区中的数据,包含start,不包含end
。StringBuffer deleteCharAt(int index);//删除指定位置的字符。
获取:
char charAt(int index);//获取指定位置上的字符。
int indexOf(String str);//获取指定字符串的位置,从前向后查找。
int lastIndexOf(String str);//反向获取指定字符串的位置,从后向前找。
int length();//获取StringBuffer的字符长度。
String substring(int start,int end);//获取字符串的“子串”,从start至end的子串。
修改:
StringBuffer replace(int start,int end,String str);//包含头,不包含尾,意思就是把从start 至end指定长度的字符串替换成其它字符串。
Void setCharAt(int index,char ch);//把StringBuffer指定位置的字符替换成其它字符。
反转:
StringBuffer reverse();//反转StringBuffer中的内容。
JDK1.5版本之后出现了StringBuilder。它的功能和StringBuffer是一致的。StringBuffer:是线程同步的,安全性高,但是运算效率低下。
StringBuilder:是线程不同步的,安全性低,但是运算效率高;在以后的开发中,通常使用StringBuklder。