• 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
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    远景GIS云产品规划
    远景GIS云上线
    远景WEBGIS平台实现客户端SHP文件加载
    GIS平台结构设计
    一款基于HTML5的高性能WEBGIS介绍
    Git分布式工作流程
    Git服务器搭建
    Linux入门-9 软件管理基础(CentOS)
    Linux入门-8 Linux系统启动详解
    Linux入门-7 Linux管道、重定向以及文本处理
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3058175.html
Copyright © 2020-2023  润新知