字符串类
String类型在Java中是不可变的类型,因为其在底层实现的是一个char类型的数组,利用该数组来存储String对象中数组的值,而数组是不可变的。
String类在JDK代码的实现中,引入了正则表达式来完成replace,split等相关操作。
在实例化String类型的时候,如果没有必要,不要使用的方式,要尽量使用的方式来创建一个String类型的变量,其可以用下面的代码测试出效率的不同:
public static void main(String[] args) {
long start = System.currentTimeMillis();
for(int i =0;i
String string = "hello";
}
System.out.println(System.currentTimeMillis() - start);
//输出 3
start = System.currentTimeMillis();
for(int i =0;i
String string = new String("world");
}
System.out.println(System.currentTimeMillis() - start);
//输出 71
}
造成这种结果的主要原因是,String类的构造方法是这样定义的:
Java在使用如下的方式声明:
是声明在Java的常量池中,作为常量来处理的,这样做的好处是:
如果有另外的一个变量的值与已有的一个字符串的值是相同的,就不会再重新创建一个对象,直接将两个变量引用到常量池中的同一个位置。而在上述的String类的构造方法中,会重复创建一个String对象,这个对象将常量字符串包装起来了。
那么也就有:
public static void main(String[] args) {
String string = "hello";
String string1 = "hello";
System.out.println(string == string1); //true
String string2 = new String("hello");
String string3 = new String("hello");
System.out.println(string == string2); //false
System.out.println(string2 == string3); //false
}
领取专属 10元无门槛券
私享最新 技术干货