关于字符串
关于String最重要的几点:
- String类是引用类型
- String类在定义时就是final的,不可修改
- String在结果上相当于字符数组char[],底层是字节数组byte[]
内存结构
String为引用类型体现于其在栈内存和堆内存中的结构
堆内存中有字符串常量池。有几种new字符串的方式:
String str="ass"; //方式1 String str1=new String("ass"); //方式2 char[] cha={'2','2'}; String str2=new String(cha); //方式3
方式1:在常量池中检查是否有"ass"字符串,如果有直接指向它。没有的话会在常量池中创建“ass”,然后指向它。
方式2/3:关键是这个new关键字。还是会检查常量池,没有的话仍然会在常量池创建一份。但还要在堆内存中再创建一个“ass”,然后指向它。
因此:
System.out.println((str == str1)); //false System.out.println(str.equals(str1)); //true
第一个==返回false,因为这是指对象内存地址是否相等
第二个==返回true,因为这是指值的相等
字符串的“修改”
字符串虽然不能修改,但是可以写出+=这种拼接写法。
String str3="ass"; str3+=" broken"; System.out.println(str3);//输出ass broken
这是因为jvm在常量池中又生成了一份拼接后的"ass broken",然后把str3的指向拼接后的结果
StringBuilder和StringBuffer
如果要频繁修改字符串,用Sting类则会频繁的创建对象,因此,这时可以使用StringBuilder和StingBuffer。
可以使用其append()方法拼接,reverse方法翻转。
StringBuffer是线程安全的,StringBuilder不是线程安全的(多个线程同时操作的时候可能会出错),但也效率更高。
String和StringBuilder可以互相转换

一些常用用法::
数字---字符串互相转换
String str = "123"; int num = 12; //字符串转换为数字 int tranToNum = Integer.parseInt(str); //数字串转化为字符串 String tranToStr = String.valueOf(num);
和字符数组互相转换
String myString = "hello123"; //创建一个字符串变量myString char[] myCharArray; //创建一个字符数组myCharArray myCharArray = myString.toCharArray(); //将字符串变量转换为字符数组 char[] str = {'h','e', 'l', 'l', 'o', ' ', '1','2','3'}; //创建一个字符数组 String string1 = new String(str);//new一个 String string2 = String.valueOf(str);//或者使用静态方法
charAt方法
String s = "www.runoob.com"; char result = s.charAt(6); System.out.println(result);
长度,这里是.length() 方法,和.size()方法(集合框架),以及.length属性(数组)进行区别
String Str1 = new String("www.runoob.com"); String Str2 = new String("runoob" ); System.out.print("字符串 Str1 长度 :"); System.out.println(Str1.length()); System.out.print("字符串 Str2 长度 :"); System.out.println(Str2.length());
子字符串 substring()方法 注意无大写
public class Test { public static void main(String args[]) { String Str = new String("www.runoob.com"); System.out.print("返回值 :" ); System.out.println(Str.substring(4) ); System.out.print("返回值 :" ); System.out.println(Str.substring(4, 10) );//包前不包后 } }
split 拆分
String str = new String("Welcome-to-Runoob"); System.out.println("- 分隔符返回值 :" );//返回字符串数组 for (String retval: str.split("-")){ System.out.println(retval); }

浙公网安备 33010602011771号