文章目录
String类
1. String类的两种实例化方式
- 直接赋值
String str = "hello world";
在JVM底层会自动维护一个对象池,如果采用直接赋值进行实例化,那么该实例化对象会自动保存在这个对象池中,如果下次继续使用直接复制的模式声明String类对象,此时对象池中如果有指定内容将直接进行引用,如果没有则开辟新的字符串对象然后将其保存在对象池中以供下次使用
- 传统方法
String str = new String("hello");
使用构造方法会开辟两个堆内存空间,其中一块堆内存空间将成为垃圾空间,而且会产生字符串共享问题。
在String类中提供了方法入池操作public String intern();
String str1 = new String("hello").intern();
String str2 = "hello";
System.out.println(str1 == str2);//true
2.字符串相等比较
如果有两个int型变量,判断其相等可以用 == 完成;
如果要判断两个字符串是否相同:
String str1 = "hello";
String str2 = new String("hello");
System.out.print(str1 == str2);//false
此时用“==”是比较了两个对象所保存的内存地址,而不是字符串内容。
所以,要想进行字符串内容比较就必须要用到String类提供的equals方法:
String str1 = "hello";
String str2 = new String("hello");
System.out.print(str1.equals(str2));
面试题:
解释String类中“==”与“equals”的区别
1."=="进行的是数值比较,比较的是两个字符串对象的内存地址数值。
2.“equals()”可以进行字符串内容的比较。
3.字符串常量不可更改
字符串一旦定义不可更改,但是字符串对象的引用可能会一直改变,这样就会形成大量的垃圾空间。
原则:
1.字符串使用就采用直接赋值;
2.字符串比较就使用equals()实现;
3.字符串别改变太多。
4. 字符与字符串
1)将字符数组转为字符串:
public String (char[ ] value)
public String(char[ ] value,int offset,int count)
2)将字符串转为单个字符
public char charAt(int index):char c = " hello".charAt(1);
3)将字符串转为字符数组
public char[ ] toCharArray( );
4)取得字符串长度:
public int length( );
5.字节与字符串
1)将字节数组转为字符串(重要)
public String (byte[ ] value)
public String(byte[ ] value,int offset,int count)
2)将字符串转为字节数组
public byte[ ] getBytes( );
3)将字符串按照指定编码转为字节数组
public byte[ ] getBytes(String charsetName);
6.String类的其他方法
a.字符串比较
1)不区分大小写相等比较
public boolean equalsIgnoreCase(String anotherString)
2)比较两个字符串大小
public int compareTo(String anotherString)
a.返回大于0:表示大于比较对象;
b.返回等于0:表示等于比较对象;
c.返回小于0:表示小于比较对象。
b.字符串查找(重要)
public boolean contains(String str):判断str在本字符中是否存在
public boolean startsWith(String str):判断是否以指定字符串开头
public boolean startsWith(String str,int index):从指定位置开始判断是否以指定字符串开头
public boolean endsWith(String str):判断是否以指定字符串结尾
c.字符串替换
public String replaceAll(String regex,String replacement):替换所有指定内容
public String replaceFirst(String regex,String replacement):替换首个内容
d.字符串拆分
public String[ ] split(String regex):将字符串按照指定格式全部拆分
public String[ ] split(String regex,int limit):将字符串部分拆分,数组长度为limit
e.字符串截取
public String substring(int beginIndex)
:从指定位置截取到字符串结尾
public String substring(int beginIndex,int endIndex)
[ ):截取部分内容
f.其他方法
去掉左右空格,保留中间空格:public String trim( );
转大小写:
public String toUpperCase( );
public String toLowerCase( );
判断字符串是否为空(只能判断是否为空字符串而不是null):public boolean isEmpty( );