天天看点

Object类 与 字符串常用方法

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方法

[email protected]

[email protected]

[email protected]

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。