String常量池
String常量池是java字符串中的一个优化措施,在堆中开辟一个空间,用于缓存所有使用字面量形式创建的字符串对象,所以在使用相同字面量形式创建的字符串都是重用的同一个对象以减少对内存的开销。
static final String S="123";
public static void main (String[]args){
String s1="123abc";
String s2="123abc";//实际上s2是重用了s1的“123abc”
//s1和s2都存在于String常量池中
String s3=new String("123abc");//s1和s3是不同的对象,因为s3是new对象,说明在堆中创建了一个新的对象,不存在于String常量池中
String s4="123"+"abc";//java编译器有一个特性:当编译期间可以确定某个计算表达式的结果时,
编译器会在编译期间就进行计算并将结果编译到字节码文件中,所以s4和s1是向同的
String s5=S+"abc";//因为S是常量,所以和s4的情况是相似的,s5和s1相等
String s="123";
String s6=s+"abc";//这个等同于新建了一个对象,s6不存在于Srtring常量池中
String s7=str()+"abc";//调用了静态方法,编译期不会对方法进行编译,所以s7和s1不相等
}
public static String str(){
String m;
return m="123";
}
charAt方法:返回当前字符串中给定位置对应的字符
语法:char charAt(int index)
public static void main(String[] args){
String str="hello world";
char c=str.charAt(3);
System.out.println(c);//输出结果是l
}
indexOf方法:返回给定的字符串在当前字符串中的位置,若当前字符串不包括该内容,则返回值为0
语法:int indexOf(String str)
int indexOf(String str,index)可以指定从某个位置开始向后检索
int lastIndexOf(String str)表示给定的字符串最后出现的位置
public static void main(String[] args){
String str="thinking in java";
int index=str.indexOf("in");
System.out.println(index);//输出结果是2
int index1=str.indexOf("In");
System.out.println(index1);//输出结果是-1,原数组不存在In这个字符串
}
length方法:用于返回当前字符串的长度
语法:int length();
public static void main(String[] args){
String str="我爱你,亲爱的中国!"
int len=str.length();
System.out.println(len);//输出结果为10
}
startsWith方法和endsWith方法:判断字符串是否以给定字符串开头和结尾
语法:boolean startsWith(String str);
boolean endsWith(String str);
public static void main(String[] args){
String str="www.baidu.com";
boolean start=str.startsWith(www.);
boolean end=str.endsWith(.cn);
System.out.println(start);//输出结果是true
System.out.println(end);//输出结果是false
}
substring(int start,int end)方法:截取当前字符串中指定位置的子字符串,两个参数是当前字符串起始位置和截止位置的下标
语法:String substring(int start,int end);
public static void main(String[] args) {
String str="0123456789"
String sub=str.substring(5,8);
System.out.println(sub);//输出结果是567,因为javaAPI表示截取范围的话,通常是含头不含尾的
}
toUpperCase方法和toLowerCase方法:将给定字符串中的所有英文转换成大写或者是小写
语法:String toUpperCase();
String toLowerCase();
public static void main(String[] args) {
String str="我爱Java"
String upper=str.toUpperCase();
System.out.println(upper);//输出结果为 我爱JAVA
String lower=str.toLowerCase();
System..out.println(lower);//输出结果为 我爱java
}
trim方法:去除字符串两边的空白区域
语法:String trim();
public static void main(String[] args) {
String str=" hello ";
String trim=str.trim();
System.out.println(trim);//输出结果为“hello”
}
valueOf方法:String提供的一组静态方法,可以将其他类型的数据转换成String类型的数据,多用于基础类型数据转换成String类型的数据
语法:static String valueOf(XXX xxx);
public static void main(String[] args) {
int a=123;
String s=String.valueOf(a);
System.out.println(s);//s输出结果是123,但是其数据类型实际上是String类型的
String s1=a+"";//输出s1同样可以达成效果,但是性能上不如valueOf方法
}