码迷,mamicode.com
首页 > 编程语言 > 详细

Java不可变序列String和可变序列StringBuilder、StringBuffer

时间:2019-08-05 20:42:51      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:end   源码   ringbuf   runtime   run   常用   oid   ring   shc   

String

String变量是不可变的,源码里面用了final修饰。

private final char value[];
String str = "Hello";
System.out.println(Integer.toHexString(str.hashCode()));
str = "World";  //字符串一旦变化就会重写生成一个对象
System.out.println(Integer.toHexString(str.hashCode()));
//输出
42628b2
4fe2b72

StringBuilder线程不安全,但效率高,常用。

StringBuffer线程安全,但效率低。

StringBuilder sb = new StringBuilder("Hello");
System.out.println(Integer.toHexString(sb.hashCode()));
sb.append(" World");    //追加
System.out.println(sb);
System.out.println(Integer.toHexString(sb.hashCode()));
//输出
45ee12a7
Hello World
45ee12a7
public class Test {
    public static void main(String[] args) {
        String str1 = "";
        long num1 = Runtime.getRuntime().freeMemory();
        long num2 = System.currentTimeMillis();
        for (int i = 0; i < 5000; i++) {
            str1 = str1 + i;
        }
        long num3 = Runtime.getRuntime().freeMemory();
        long num4 = System.currentTimeMillis();
        System.out.println("消耗内存:"+(num3-num1));
        System.out.println("消耗时间:"+(num4-num2));

        StringBuilder str2 = new StringBuilder("");
        long num5 = Runtime.getRuntime().freeMemory();
        long num6 = System.currentTimeMillis();
        for (int i = 0; i < 5000; i++) {
            str2.append(i);
        }
        long num7 = Runtime.getRuntime().freeMemory();
        long num8 = System.currentTimeMillis();
        System.out.println("消耗内存:"+(num7-num3));
        System.out.println("消耗时间:"+(num8-num4));

    }
}
//输出
消耗内存:-5895808
消耗时间:149
消耗内存:0
消耗时间:0

 

Java不可变序列String和可变序列StringBuilder、StringBuffer

标签:end   源码   ringbuf   runtime   run   常用   oid   ring   shc   

原文地址:https://www.cnblogs.com/chiweiming/p/11305157.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!