String
String概述
1、String:字符串类型,可以定义字符串变量指向字符串对象
2、String是不可变字符串:
- String变量的每次修改其实都是产生了指向新的字符串对象,而原来的字符串对象并未改变(改变String变量指向的地址)
- 以“ ”创建的字符串对象(例:String name=“牛嘉桢”),在字符串常量池中储存。
String常用方法
1、字符串内容的比较:
- 利用==进行比较:比较字符串之间的地址、内容是否相等
- 利用String类方法equals比较:比较字符串内容是否相等
2、常用API:
代码:
public class StringAPI {
public static void main(String[] args) {
String name="牛嘉桢";
System.out.println(name.length());//长度
System.out.println(name.charAt(2));//返回索引处字符串(返回桢)
//遍历字符串数组 ;
for (int i = 0; i < name.length(); i++) {
System.out.println(name.charAt(i));
}
//字符串转换为字符数组
char a[]=name.toCharArray();
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
//根据开始和结束索引进行截取,得到新的字符串(包括begin不包括end)
String b=name.substring(1,2);//包括1不包括2
System.out.println(b);
//从begin值截取到末尾;
String c=name.substring(1);
System.out.println(c);
//采用新值替换字符串中旧值(用于替换敏感词)
String Name="123124123124123124123123";
System.out.println(Name.replace("1", "*"));
//判断字符串中是否含有相应值
System.out.println(Name.contains("1"));
//判断是否有相应值为开头开始
System.out.println(Name.startsWith("1"));
System.out.println(Name.startsWith("2"));
//根据某个内容讲字符串分割成字符串数组
String name1="牛嘉桢,njz,Njz";
String aa[]=name1.split(",");
for (int i = 0; i < aa.length; i++) {
System.out.println(aa[i]);
}
}
}
3、String类创建对象的方式
-
直接用双引号**“ ”**定义:String name=“njz”
- 在字符串常量池中储存同一个,不重复
-
运用String类的new构造器:
- 每new一次都会产生一个新的对象,放在堆内存中,重复的字符串储存多次
代码:
public class StringTest { public static void main(String[] args) { String s="name"; System.out.println(s); String s1=new String(); System.out.println(s1); String s2=new String("njz"); System.out.println(s2); char a[]={'a','b','c'}; String s3=new String(a); System.out.println(s3); //双引号""的方式给出的字符串对象在字符串常量池中储存,并且相同内容只储存一份 String ss="njz"; String sss="njz"; System.out.println(String.class.getName() + "@" + Integer.toHexString(System.identityHashCode(ss))); System.out.println(String.class.getName() + "@" + Integer.toHexString(System.identityHashCode(sss))); //ss与sss地址相同,说明字符串ss与sss都指向字符串常量池中的同一个字符串 //通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中 String ss1=new String("njz"); String sss1=new String("njz"); System.out.println(String.class.getName() + "@" + Integer.toHexString(System.identityHashCode(ss1))); System.out.println(String.class.getName() + "@" + Integer.toHexString(System.identityHashCode(sss1))); //相同的String字符串,但地址不同 } }