各位大佬,最近关于string的问题始终没有想明白,希望有大神能够指点。
这里有几个问题:
1、
String a = "a";
a.concat("b");
System.out.println(a); //输出:a
a = "b";
System.out.println(a); //输出:b
a = new String("c");
System.out.println(a); //输出:c
string源码里是final修饰的类,我看到源码中concat方法是返回一个新字符串对象,知道第一个输出是a,但是后面为什么还是可以直接赋值或者new对象?
2、上面那种重新赋值得到的a究竟是引用变了,指向了新的字符串,还是改变了原来的字符串内容?
3、为什么重新用final修饰以后,
final String a = "a";
a = "b"; //编译通过
a = new String("c"); //编译错误
string类的final和这里的fianl究竟是怎么回事呢?
4、为什么源码里final修饰的char[]也可以直接赋值?
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}