Java不可变序列String和可变序列StringBuilder、StringBuffer
2024-08-30 21:59:06
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
最新文章
- ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)
- JQuery实现table分页
- 关于Python3爬虫抓取网页Unicode
- Java系列笔记(3) - Java 内存区域和GC机制
- ios 正则邮箱
- it精英的艰辛路程
- HDU 3887:Counting Offspring(DFS序+树状数组)
- HDU 5382 莫比乌斯反演
- (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
- 通过样式调整input 中password text默认长度
- myeclipse设置技巧
- label 标签
- ProxySQL的相关维护说明
- jquery 只读
- .Net Framework 4.5.1 ASP.NET MVC 5 下新建视图报“错误 运行所选代码生成器时出错 无法检索元数据 没有为该对象定义无参数构造函数”
- 两小时入门Docker
- 分布式系列四: HTTP及HTTPS协议
- MySQL 目录结构、配置文件、修改密码
- A - Piece of Cake Kattis - pieceofcake (数学)
- vue2.0 技巧汇总