1.String类
1.1String的两种实例化方式
a.直接赋值
String str=“hello”;
b.通过构造方法实例化String对象
1.2字符串相等比较
str.equals(str1)
public boolean equals(String str1)
1.3字符串常量是String类的匿名对象
小tips:在日后的开发过程之中,如果要判断用户输入的字符串是否等同于特定字符串,一定要将特定字符串写在前面,避免NullPointerException。
1.4 String类两种实例化的区别
1.采用直接赋值:
String str1 = "hello" ;
String str2 = "hello" ;
String str3 = "hello" ;
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // true
String类的设计使用了共享设计模式
在JVM底层自动维护一个字符串对象池(对象数组)。
如果采用直接赋值的模式进行String类的对象实例化操作,此对象将自动保存到对象池中,如果下次继续采用直接赋值的模式声明String、对象,先去对象池中找是否有指定内容,如果有,直接引用。如果没有,开辟新空间而后将其保
2.采用构造方法
在String类中提供有方法入池操作public String intern() ;(字符串手工入池操作:)
面试题:请解释String类中两种对象实例化的区别
1. 直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。 2. 构造方法:会开辟两块堆内存空间,其中一块成为垃圾空间,不会自动保存在对象池中,可以使用intern() 方法手工入池。
因此,我们一般会采取第一种方式即直接赋值。
1.5字符串不可变更
字符串一旦定义不可改变
所有的语言对于字符串的底层实现,都是字符数组,数组的最大缺陷就是长度固定。在定义字符串常量时,它的内 容不可改变。
原则:
1. 字符串使用就采用直接赋值。
2. 字符串比较就使用equals()实现。
3. 字符串别改变太多。
1.6字符与字符串******
String<->char
字符数组char[]<->String
public String(char[ ] value1);
public String(char[ ] value1,int offset,int count);
将字符串按照索引转为单个字符
String->char
public char charAt(int index)取得制定索引的字符返回
将字符串转为字符数组
String->char[ ]
public char[ ] toCharArray();
1.7字节与字符串
1.7.1 byte-〉String
String构造方法
public String(byte bytes[ ])
String-〉byte[ ]
*****public byte[ ] getBytes(String charset)按照规定编码转为字节数组
1.8字符串的比较
〉0表示本字符串大于目标字符串
=0 二者相等
〈0表示本字符串小于目标字符串
1.9 字符串的查找
- 判断一个子字符串是否存在
public boolean contains(CharSequence s)
- 判断是否以指定字符串开头
public boolean startswith(String prefix)
- 从指定位置开始判断是否以指定字符串开头
public boolean startswith(String prefix,int offset)
- 判断是否以指定字符串结尾
public boolean endswith(String suffix)
1.10字符串的替换
1.11字符串的拆分
特殊字符需要转义后拆分 \\
eg:\\
1.12字符串的截取
2. 左闭右开
1.13字符串的其他操作方法
1.14StringBuffer类andStringBuilder类
- 字符串拼接方法
public synchronized StringBuffer append(各种数据类型 b)
- StringBuffer与String的相互转换
- String变为StringBuffer:利用StringBuffer的构造方法或append()方法
- StringBuffer变为String:调用toString()方法。
除了append()方法之外,String也有一些String类
没有的方法
- 字符串的反转
public synchronized StringBuffer reverse()
- 删除指定范围的数据
public synchronized StringBuffer delete(int start,int end)
- 字符串的插入操作
public synchronized StringBuffer insert(int offset, 各种数据类型 b)
面试题:请解释String、StringBuffer、StringBuilder的区别:
- String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
- StringBuffer(JDK1.0)采用同步处理,属于线程安全操作,但效率较高;而StringBuilder(JDK1.5)采用异步处理,属于线程不安全操作,效率较高,当在String对象进行“+”,编译时会将String类变为StringBuilder进行append处理。
Object类-最高参数统一化
Object类是Java默认提供的一个类。Java里面除了Object类,所有类都是存在继承关系的。默认继承Object父类,即,所有的类的对象都可以使用Object进行接收
系统输出默认调用对象的toString()方法
Object中的toString()只是简单输出当前所引用的类名称以及对象地址,如果想在类中取的本类属性信息,需要覆写toString();