String两种赋值方式:
1)String s1= " asdfgh"; 在(堆中)字符串常量池中找asdfgh,如果没有就创建字符串常量池对象,s1指向字符串常量池asdfgh。
如图:
String 的编译与运行:
String s2= "asdfgh"; s1已有,不用再创建对象。
2)String s3= new String( " asdfgh" ); 该方式最少创建一个对象,如果字符串常量池已有,则只需要在堆new一个对象asdfgh,并s3指向asdfgh
s1==s2 --------------> true s1与s2指向同一内存地址(字符串常量池)
s1==s3 --------------> false s1与s2指向不同的内存地址
1) String a= "a"; 编译期可以确定值,则在堆中字符串常量池中创建对象
String a1=a+1; a为变量,在编译期不能确定,只能在运行期在堆中创建对象
String b=a;
b==a ----------------> false
String常用 方法:
2)final String a= "a"; 已是常量
String a1=a+1;
String b=a;
b==a ----------------> true
3)public static String getD(){
return "d";
}
final String d=getD(); 调用方法在运行期才能返回结果, 即在堆中创建对象
String d1=d+1;
String d2= "d1";
d2==d1 --------------> false
4) String e= "e"+1;
String e1="e1";
e==e1 ---------------> true
length() ---------------> 返回字符串长度
charAt( int ) ---------------> 返回char
toCharArray() ---------------> String 转 char 数组
startsWith( String ) ---------------> 以String开头,返回boolean
endsWith( String ) ---------------> 以String结束,返回boolean
replace( old, new ) ---------------> 替代
replaceAll( "\\d","*") ---------------> 如用*代替全部数字
substring( int开,int结) ---------------> 截取字符串
split( String ) ---------------> 分割
indexOf( int 或 String ) ---------------> 返回int
toLowerCase( ) ---------------> 转小写
toUpperCase( ) ---------------> 转大写
isEmpty( ) ---------------> 查空,返回boolean
concat( String ) ---------------> 连接字符串
equals( String ) ---------------> 比较相等,返回boolean
特例:String s= "123456";
char[] cs=s.toCharArray();
String s1=new String( cs, 0, 5 ); 截取字符串