String类
实现接口:
Serializable接口表示String是串行化的,表示String类可以在网络上传输
Comparable接口表示String类是可以比较的,具体实现方法,可以自己写,也可以按照他的规则
String类是final类,不能被其他类继承
String有属性private final char value[] 用于存放字符串内容
一定要注意
value是final类型,一但被赋值就不能改变
但是这里的不可改变是指地址不可修改,而不是值不可修改,如图
value一开始指向0x12345,之后不能改变地址,也就是不能修改成0x2345
但是能够修改他的值,比如,能把char数组中的 J 修改成A或者别的,但是不能将value指向v2
final char [] value = {'J','A','C','K'};
value[0] = 'A';
final char [] v2 = {'a'};
value = v2;//错误,地址不可修改
两种创建String对象的区别
-
直接赋值
String s = "xhp"
-
调用构造器
String s2 = new String("xhp");
方式一:先从常量池查看是否有"xhp"数据空间,如果有,直接指向,如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址
方式二:先在堆中创建空间,里面维护了value属性,指向常量池的xhp空间,如果常量池没有,重新创建,如果有,直接通过value指向。最终指向堆中的空间地址。
如图
题目:
String a = "xhp";
String b = new String("xhp");
System.out.println(args.equals(b));//T
System.out.println(a == b);//F
System.out.println(a == b.intern());//T
System.out.println(b == b.intern());//F
//intern()返回常量池中的地址,如果没有找到则创建一个新的