String创建后之不可变的
字符串的修改实际上是产生了一个新的变量,并将字符串变量指向该变量的地址。
原本输入的字符串是不发生改变的。
字符串的构造方法有多种
在有参构造其中需要注意两种,分别是将字符数组转为字符串以及将字节数组转换为字符串。
字符数组转化为字符串
char[] a = {'2','3','a','b'};
String b = new String (a);
System.out.println(b);
字节数组转化为字符串
byte[] a = {32,54,32,6,21,121};
String b = new String(a);
System.out.println(b);
"" 直接生成字符串和 new 生成字符串的区别
通过 "" 生成的字符串是储存在常量池中的,相同的字符串只存储一次,而 new 生成的字符串对象是在堆内存中存储一个新的对象。
String s1 = "123";
String s2 = "123";
System.out.println(s2 == s1);
System.out.println("---------------------");
String ss1 = new String("123");
String ss2 = new String("123");
System.out.println(ss1 == ss2);
true
---------------------
false
通过程序可以清楚的明白两者之间的关系。
" "相当于在常量池中直接创建了一个对象(在常量池中没有的情况下)
注意事项:
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c";
System.out.println(s1 == s3);
只要不是双引号给出来的,运算结果放在堆内存中。
s3这样的写法相当于创建了一个新的对象存放在堆内存中。
String s1 = "abc";
String s2 = "a" +"b"+ "c";
System.out.println(s1 == s2);
这种形式因为运算过程中不包含变量,编译器会直接对运算进行简化。
将 "a" +"b"+ "c" 转化为 "abc" 且是存储在常量池中。
字符串转化为字符数组
String a = "12456";
char[] b = new char[5];
b = a.toCharArray();
for (int i = 0; i < a.length(); i++) {
System.out.println(b[i]);
}