您的位置:首页 > 编程语言 > Java开发

Java高级技术第三章——Java的String字符串类实现原理

2018-02-12 10:34 399 查看

前言

前言点击此处查看:

http://blog.csdn.net/wang7807564/article/details/79113195

字符串类

String类型在Java中是不可变的类型,因为其在底层实现的是一个char类型的数组,利用该数组来存储String对象中数组的值,而数组是不可变的。

String类在JDK代码的实现中,引入了正则表达式来完成replace,split等相关操作。

在实例化String类型的时候,如果没有必要,不要使用
new String("string")
的方式,要尽量使用
"string"
的方式来创建一个String类型的变量,其可以用下面的代码测试出效率的不同:

public static void main(String[] args) {
long start = System.currentTimeMillis();
for(int i =0;i<Integer.MAX_VALUE;i++){
String string = "hello";
}
System.out.println(System.currentTimeMillis() - start);
//输出 3
start = System.currentTimeMillis();
for(int i =0;i<Integer.MAX_VALUE;i++){
String string = new String("world");
}
System.out.println(System.currentTimeMillis() - start);
//输出 71
}


造成这种结果的主要原因是,String类的构造方法是这样定义的:

public String(String var1) {
this.value = var1.value;
this.hash = var1.hash;
}


Java在使用如下的方式声明:

String string = "string";


是声明在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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: