zoukankan      html  css  js  c++  java
  • String类剖析

    一、两种实例化方式:

    String str = “abc”;

    String str = new String("abc");

    一个字符串就是String的匿名对象。

    "hello".equals(str)    一个字符串能够调用一个函数,可以看出,一个字符串是String的匿名对象。

    二、比较

    (1)直接赋值

    String str = “abc”;表示一个堆内存指向给了栈内存。

    直接赋值可以节省内存

    举例:

    public class StringDemo01{
    	public static void main(String args[]){
    		//享元模式
    		//在堆内存中有一个"hello"的String对象,而str1和str2和str3指向这个匿名对象
    		String str1 = "hello";
    		String str2 = "hello";
    		String str3 = "hello";
    		System.out.println("str1 == str2  --> "+(str1 == str2)); 
    		System.out.println("str1 == str3  --> "+(str1 == str3)); 
    		System.out.println("str2 == str3  --> "+(str2 == str3)); 
    	}
    }


    (2)new

    举例:

    public class StringDemo01{
    	public static void main(String args[]){
    		
    		String str1 = new String("hello");
    		String str2 = new String("hello");
    		System.out.println("str1==str2 -->"+(str1==str2)); 
    	}
    }


    1.创建了"hello"的匿名String对象。

    2.创建一个str的对象,并开辟新的堆空间。

    3.原来的“hello”的匿名对象变成垃圾。

    因此开发中最好使用直接赋值。

    三、字符串的不可改变性


    为什么str+="world"这种连接操作效率低,就是因为这个。

    所以才会有StringBuilder或者StringBuffer。

    四、String和StringBuilder的性能比较

    public class StringDemo02{
    	public static void main(String args[]){
    		long begin1 = System.currentTimeMillis();
    		String str = "";
    		for(int i=0;i<10000;i++){
    			str+=i;
    		}
    		long end1 = System.currentTimeMillis();
    		System.out.println("String用时: "+(end1-begin1)+" ms");	 //用时2000ms
    		
    
    		long begin2 = System.currentTimeMillis();
    		StringBuilder sbuilder = new StringBuilder();
    		for(int i=0;i<10000;i++){
    			sbuilder.append(i);
    		}
    		long end2 = System.currentTimeMillis();
    		System.out.println("StringBuilder用时: "+(end2-begin2)+" ms");//用时0ms,所以快了很多
    	}
    }

    作者:xiazdong
    出处:http://blog.xiazdong.info
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    NHibernate初学者指南系列文章导航
    c# 类一般在哪里实例化,是在类内、方法内还是其他地方?
    日期和时间的正则表达式
    virtual和abstract区别
    VS2010和选中代码相同的代码的颜色设置,修改高亮颜色
    SqlServer表和EXCEL数据互相复制方法
    C#操作XML的方法
    1、Spring Boot 2.x 简介
    C语言学习系列(六)基本语法
    C语言学习系列(六)存储类
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3058175.html
Copyright © 2011-2022 走看看