String创建方式
字面量方式
- 通过字面量方式创建的String存储在方法区,String直接指向方法区的地址
- 只在方法区开辟了一块空间用于存储字符串常量
String ss3 = "你好"
new方式
- 通过new创建的String存储在堆空间,String指向堆空间的地址,String的value属性指向方法区地址
- 在堆开辟一块空间存储String对象
- 在方法区开辟了一块空间用于存储字符串常量
- 堆空间对象的value属性指向方法区字符串常量的空间地址
String ss4 = new String("中国")
String拼接注意事项
- 常量与常量的拼接发生在常量池中,相当于使用字面量方式创建String
- 常量与变量,变量与变量的拼接发生在堆空间,也就是相当于new方式创建了String
final String ss5 = "Hello"
String ss6 = "World"
String ss7 = "HelloWorld"
String ss8 = "Hello" + "World"
String ss9 = ss5 + "World"
String ss10 = "Hello" + ss6
String ss11 = ss5 + ss6
System.out.println(ss7 == ss8)
System.out.println(ss7 == ss9)
System.out.println(ss7 == ss10)
System.out.println(ss7 == ss11)
String类型转换
String与基本数据类型的互转
- String转成基本数据类型,使用对应包装类型的parseXXX方法
- 注意,在转成数值类型时,字符串中包含非数字字符,会报NumberFormatException异常
- 基本数据类型转成字符串,可以使用String.valueOf或“+”
byte b1 = Byte.parseByte("12")
short s1 = Short.parseShort("111")
int n1 = Integer.parseInt("111")
float f1 = Float.parseFloat("11")
double d1 = Double.parseDouble("11")
boolean b2 = Boolean.parseBoolean("11")
boolean b3 = Boolean.parseBoolean("true")
boolean b4 = Boolean.parseBoolean("True")
String s2 = String.valueOf(true))
String s3 = 1 + ""
String与char[]之间的互转
- String可以使用toCharArray转成char[]
- char[]可以通过new String(charArray)转成String
char[] charArray = "中国".toCharArray()
String ss1 = new String(charArray)
String与byte[]之间的互转
- String可以使用getBytes转成byte[]
- getBytes可以设置编码格式,默认使用“UTF-8”编码
- byte[]可以通过new String(byteArray)转成String
byte[] byteArray = "中国".getBytes()
String ss2 = new String(byteArray)
Sting常用方法
类型转换
- new String(int[])
- new String(byte[])
- new String(char[])
- new String(StringBuffer)
- getBytes()
- toCharArray()
比较两个字符串内容
- equals()
- equalsIgnoreCase()
- compareTo()
检测内容是否满足某些条件
- isEmpty()
- startsWith()
- endsWith()
- contains()
- matches()
获取指定内容下标
- charAt()
- indexOf()
- lastIndexOf()
字符串截取
- substring(int beginIndex)
- substring(int beginIndex, int endIndex)
字符串替换
- replaceAll(String regex,String replacement)
- replaceFirst(String regex,String replacement)
字符串分割
- split(String regex)
- split(String regex,int limit)
其他
- toLowerCase()
- toUpperCase()
- trim()
- intern() 始终返回常量池的内存地址
- 从字符串常量池中查询当前字符串是否存在(通过equals判断)。
- 如果存在,返回常量池中的字符串引用。
- 如果不存在,把这个String对象引用存到常量池,然后返回这个String对象的引用。