Stringi简介

String类底层由char[]实现,且被final修饰,所以当对象创建后不能被修改。由于String在Java世界中使用过于频繁,Java为 了避免在一个系统中产生大量的String对象,引入了字符串常量池。其运行机制是:创建一个字符串时,首先检查池中是否有值相同的字符串对象,如果如果有则不需要创建直接从池中刚查找到的对象引用;如果没有则新建字符串对象,返回对象引用,并且将新创建的对象放入池中。但是,通过new方法创建的String对象是不检查字符串池的,而是直接在堆区或栈区创建一个新的对象, 也不会把对象放入池中。上述原则只适用于通过直接量给String对象弓用赋值的情况。
举例:

String str1 = "Hello Word!"; //通过直接量赋值方式,放入字符串常量池
String str2 = new String("Hello Word!");//通过new方式赋值方式,不放入字符串常量池
String str3 = "Hello "+"Word!";//通过new方式赋值方式,不放入字符串常量池
System.out.println(str1==str2);//运行结果:false
System.out.println(str1==str3);//运行结果:true

//前补零 
String.format("%06d",12);//运行结果: 000012

String类常用方法

1 boolean equals(Object anObject)

判断对象里的值是否相同 返回值为布尔类型。
equals方法比较的是对象的值,任何对象被放进去后,都会被强转为String对象,然后进行值的比较。

String str1 = "Hello!";
String str2 = "Hello Word!";
if(str1.equals(str2))
	System.out.println("这两个对象相同");
else
	System.out.println("这两个对象相同");
	
//运行结果:这两个对象的值不同

2 int length()

返回字符串长度
因为String对象底层由char[]实现,所以底层返回的也就是value.length。

String str = "Hello Word!"
System.out.println(str.length());//运行结果:11

3 String replace(CharSequence target, CharSequence replacement)

字符串替换:我们可以用它去掉所有空格,包括首尾、中间,或者直接替换制定字符。

String str = " Hello Word! ";
//去除所有空格
System.out.println(str.replace(" ",""));//运行结果:HelloWord!
//去除所有空格
System.out.println(str.replace("Word!","靓仔"));//运行结果:Hello 靓仔!

运行结果:11

4 char charAt(int index)

传入下标,获取指定下标的值

String str = "Hello Word!";
System.out.println(str.charAt(6));//运行结果:W

5 toUpperCase(); toLowerCase();

字符串大小写的转换

String str="Hello Word!";
System.out.println(str.toUpperCase());//运行结果:HELLO WORLD!
System.out.println(str.toUpperCase().toLowerCase());//运行结果:hello world!

6 String[] split(String regex)

字符串切割,返回String数组

String str="Hello Word!";
String[] arr = str.split(" "));//arr:{"Hello","Word!"}

7 String substring(int beginIndex,int endIndex)

截取字符串:beginIndex开始下标,endIndex结束下标,遵循包前不包后规则

String str="Hello Word!";
System.out.println(str.substring(0,5));//运行结果:Hello

8 boolean isEmpty()

判断是否为空,其实就是判断字符串长度是否等于0

String str="Hello Word!";
System.out.println(str.isEmpty());//运行结果:false

常量池总结

最后再简单的和大家说下常量池,每次创建或者修改String值的时候,首先检查字符串池中是否有”str”这个字符串,如果存在则返回这个字符串的引用,否则就将这个字符串添加到字符串池中,然会返回这个字符串的引用,这就是String字符串常量池。另外Java的8种包装类(Byte, Short, Integer, Long, Character, Boolean, Float, Double), 除Float和Double以外, 其它六种都实现了常量池, 但是它们只在大于等于-128并且小于等于127时才使用常量池。Boolean则是缓存了true和false。