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 }
相关文章推荐
- Java高级技术第三章——java.net包中的TCP/UDP/HTTP及其代理的实现
- Java对象池技术的原理及其实现
- Java对象池技术的原理及其实现
- Java对象池技术的原理及其实现
- 分页技术原理与实现(二)——Java+Oracle代码实现
- Java对象池技术的原理及其实现
- Java对象池技术原理及其实现
- Java对象池技术的原理及其实现
- [Java]String中“+”的实现原理及效率
- Java对象池技术的原理及其实现
- Java对象池技术的原理及其实现
- Java对象池技术的原理及其实现
- Java 反射学习(四)反射技术开发框架原理简单实现
- Java对象池技术的原理及其实现
- Java对象池技术的原理及其实现的小结。
- Java对象池技术的原理及其实现
- Java对象池技术的原理及其实现
- Java对象池技术的原理及其实现
- Java对象池技术的原理及其实现
- Java对象池技术的原理及其实现 --Java对象的生命周期分析