Java不可变序列String和可变序列StringBuilder、StringBuffer
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的更多相关文章
- 不可变字符串String与可变字符串StringBuilder、StringBuffer使用详解
String字符串 char类型只能表示一个字符,而String可以表示字符串,也就是一个字符序列.但String不是基本类型,而是一个定义好的类,是一个引用类型.在Java中,可以将字符串直接量赋给 ...
- Java 基础 - 如何理解String不可变
ref: https://www.zhihu.com/question/20618891 第一个答案. 扩展“ Java 基础 - System.arraycopy() 浅拷贝 深拷贝
- Java 之 可变字符序列:字符串缓冲区(StringBuilder 与 StringBuffer)
一.字符串拼接问题 由于 String 类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象. Demo: public class StringDemo { public ...
- Python中的可变、不可变对象和赋值技巧序列解包
可变对象和不可变对象 在python中一切皆对象.在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址. python中,对象分为可变(mutable)和不可变(immuta ...
- java String不可变对象,但StringBuffer是可变对象
什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...
- java基础-String不可变的好处
一.java内部String类的实现: java 8: public final class String implements java.io.Serializable, Comparable< ...
- scala (5) 可变序列和不可变序列
/** * 序列分为可变长和不可变长,序列其实就是list,底层是链表结构 * 特点:插入有序,可重复,增加和移除元素很快,查询慢 * 不可变长序列:List * 可变长序列:ListBuffer * ...
- Java进阶知识点4:不可变对象与并发 - 从String说起
一.String的不可变特性 熟悉Java的朋友都知道,Java中的String有一个很特别的特性,就是你会发现无论你调用String的什么方法,均无法修改this对象的状态.当确实需要修改Strin ...
- 【翻译】为什么Java中的String不可变
笔主前言: 众所周知,String是Java的JDK中最重要的基础类之一,在笔主心中的地位已经等同于int.boolean等基础数据类型,是超越了一般Object引用类型的高端大气上档次的存在. 但是 ...
随机推荐
- 【VUE】Vue 源码解析
Vue 源码解析 Vue 的工作机制 在 new vue() 之后,Vue 会调用进行初始化,会初始化生命周期.事件.props.methods.data.computed和watch等.其中最重要的 ...
- dede 调取二级三级菜单栏目
{dede:channelartlist typeid='} <div class="cate-item"> <div class="cate-item ...
- 【Python网络爬虫三】 爬取网页新闻
学弟又一个自然语言处理的项目,需要在网上爬一些文章,然后进行分词,刚好牛客这周的是从一个html中找到正文,就实践了一下.写了一个爬门户网站新闻的程序 需求: 从门户网站爬取新闻,将新闻标题,作者,时 ...
- JavaScript 语法——字面量,变量,操作符,语句,关键字,注释,函数,字符集
JavaScript 是一个程序语言. 语法规则定义了语言结构. 它是一个轻量级,但功能强大的编程语言. ㈠JavaScript 字面量 在编程语言中,一般固定值称为字面量,如 3.14. ⑴数字 ...
- ubuntu+tomcat+jenkins+git+maven
1.下载tomcat.jdk和jenkins.war (下面通过wget下载的jdk-8u231-linux-x64.tar.gz不能用,需要本地下载后上传到服务器)解决Linux上解压jdk报错gz ...
- BZOJ 1095: [ZJOI2007]Hide 捉迷藏 动态点分治+堆
写了7k多,可以说是一己之力切掉了这道毒瘤题~ 开 $3$ 种堆,分别维护每个子树最大深度,以及每个节点在点分树中对父亲的贡献,和全局的最优解. 由于需要支持堆的删除,所以写起来特别恶心+麻烦. 细节 ...
- HDU 2859—Phalanx(DP)
Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description Today i ...
- idea maven sync Cannot resolve xxx 的解决方案
经常会出现这种奇葩情况,提示找不到包 其实是因为网络波动或者突然断掉,导致包更新出现问题 直接去maven的仓库目录 找到不能找到的包 删掉相关目录 然后重新更新maven就行了 比如 直接去仓库目录 ...
- SELECT list is not in GROUP BY clause and contains nonaggregated
安装了mysql5.7,用group by 查询时抛出如下异常 SQLSTATE[42000]: Syntax error or access violation: 1055 Expression # ...
- Uploading multiple files asynchronously by blueimp jquery-fileupload
Uploading multiple files asynchronously by blueimp jquery-fileupload Solved. Fiddle: http://jsfidd ...