JAVA-String
String如何实现
String内部是char数组
重要构造方法
String 为参数的构造方法
char[] 为参数的构造方法
StringBuffer为参数的构造方法
StringBuilder 为参数的构造方法
String字符串equals()
重写了Object中equals方法, 先判断对比值是String类型
源码 if(anObject instanceof String)
判断参数是String类型之后,循环对比两个字符串中的每一个字符
String字符串compareTo()
返回类型是int值,只接受String类型的参数。
源码
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
两个字符串中有一个字符不相等时,返回差值。
equals与==
(前提,基本数据类型判断的是值,引用数据类型判断的是地址。)== 传入的参数时Object只需要判断参数的值相等就可以了,不需要判断类型
boolean flag=1.0000==1;
String ff="java";
String fb="java";
boolean fff=ff==fb;
System.out.println("shujuleixingpanduan==="+flag+"======shujuleiixngpanduan==="+fff);
附上:基本数据类型,引用类型
1、基本数据类型
基本数据类型只有8种,可按照如下分类
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean
2、引用数据类型
引用数据类型非常多,大致包括:
类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
String用final修饰
第一安全
例如:调用其他方法时,调用一些系统级操作指令之前,可能会有一系列校验,如果是可变类的话,在校验过后内部的值可能就改变了
第二高效
能够缓存结果,传参时可以不考虑谁会修改他的值
StringBuilder和StringBuffer的区别
StringBuffer使用subchronized来保证线程安全,性能不是很高
StringBuilder性能更好,不支持并发
String与JVM
String newString()
会在堆上创建一个字符串对象,然后再去常量池中查询此字符串的值是否已经存在,如果不存在会在常量池中创建此字符串,然后把引用的值指向此字符串。
直接赋值
先去常量池查看是否已经有此值。已有,返回引用地址直接指向此值,否则会在常量值中创建一个字符串对象,再引用指向此值。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传