一、String
- 首先,String不是基本数据类型(java八大基本数据类型:byte、short、int、long、float、double、char、boolean)。
- String是final类,不能被继承,一旦创建,就不能改变它的值。
- 对于已经存在的String对象,修改它的值,就是在字符串池中开辟一个新的空间存放新的值,并把这个值赋值给该对象,但串池中旧的值依然存在,重新把旧值赋值给该对象,对象就会重新连接串池中的旧值,地址不会变。如:
public class Test_String {
public static void main(String[] args) {
String st1 = "A";
System.out.println("st1(A)的哈希码:"+st1.hashCode()+" 内存地址:"+System.identityHashCode(st1));
st1 = "B";
System.out.println("st1(B)的哈希码:"+st1.hashCode()+" 内存地址:"+System.identityHashCode(st1));
System.out.println("A的哈希码: "+"A".hashCode()+" 内存地址:"+System.identityHashCode("A"));
st1 = "A";
System.out.println("st1(A)的哈希码:"+st1.hashCode()+" 内存地址:"+System.identityHashCode(st1));
String st2 = "A";
System.out.println("st2的哈希码: "+st2.hashCode()+" 内存地址:"+System.identityHashCode(st2));
}
}
public class TestString {
public static void main(String[] args) {
String st1 = "A";
String st2 = "B";
String st3 = "AB";
String st4 = st1+st2;
System.out.println("str1:"+st1+" str2:"+st2+" str3:"+st3+" str4(st1+st2):"+st4);
System.out.println("---哈希码---");
System.out.println("st1:"+st1.hashCode());
System.out.println("st2:"+st2.hashCode());
System.out.println("st3:"+st3.hashCode());
System.out.println("st4:"+st4.hashCode());
System.out.println("---内存地址---");
System.out.println("st1:"+System.identityHashCode(st1));
System.out.println("st2:"+System.identityHashCode(st2));
System.out.println("st3:"+System.identityHashCode(st3));
System.out.println("st4:"+System.identityHashCode(st4));
System.out.println("A+B:"+System.identityHashCode("A"+"B"));
System.out.println("1.str1+str2:"+System.identityHashCode(st1+st2));
System.out.println("2.str1+str2:"+System.identityHashCode(st1+st2));
System.out.println("3.str1+str2:"+System.identityHashCode(st1+st2));
System.out.println("---相等判断---");
System.out.print("st3==\"AB\"?");
System.out.println(st3=="AB");
System.out.print("st3==st4?");
System.out.println(st3==st4);
System.out.println("st3.equals(st4)?"+st3.equals(st4));
System.out.print("st4==\"AB\"?");
System.out.println(st4=="AB");
System.out.print("st4==\"A\"+\"B\"?");
System.out.println(st4=="A"+"B");
System.out.print("st3==\"AB\"?");
System.out.println(st3=="AB");
System.out.print("st3==\"A\"+\"B\"?");
System.out.println(st3=="A"+"B");
System.out.println("---重新赋值---");
st1 = "C";
System.out.println("st1:"+st1.hashCode());
System.out.println("st1:"+System.identityHashCode(st1));
System.out.println("---再赋值回去---");
st1 = "A";
System.out.println("st1:"+st1.hashCode());
System.out.println("st1:"+System.identityHashCode(st1));
System.out.println("C:"+System.identityHashCode("C"));
}
}