java字符串拼接还是格式化_Java中三种字符串的拼接(++ , String.format , StringBuilder.a...

在Java中 , 对字符串内容的拼接是比较常见的操作 , 通常有三种方式 .

用String类重载'+'运算符进行拼接本质上是调用StringBuilder.append . 用类似C的printf风格 , 调用String.format() . 底层是调用formatter.format方法 . 用原生的StringBuilder.append方法 .

那从性能和内存占用两个方面考虑到底是哪一个方法更好呢?

package com.xbz.demo;

public class StringAppend {

private static final int frequency = 10000;

private static Runtime runtime = Runtime.getRuntime();

private static long memory;//初始可用内存

private static long beginTime;//开始时间

/* 模拟变量 */

private static String productName = "iPhone XXL";//产品名称

private static Double productPrice = 9899.0;//产品价格

private static String productAddress = "中国";//产品生产地

public static void main(String[] args) {

beginTime = System.currentTimeMillis();

memory = runtime.freeMemory();

stringAppend1();

printInfoAndClear();

stringAppend2();

printInfoAndClear();

stringAppend3();

printInfoAndClear();

}

/** 字符串拼接 , +号直接拼接 */

private static void stringAppend1() {

for (int i = 0; i < frequency; i++) {

String result = "产品名称 : " + productName + " , 价格 : " + productPrice + " , 生产地 : " + productAddress;

}

}

/** 字符串拼接 , String.format格式化方式 */

private static void stringAppend2() {

for (int i = 0; i < frequency; i++) {

String result = String.format("产品名称 : %s , 价格 : %s , 生产地 : %s", productName, productPrice, productAddress);

}

}

/** 字符串拼接 , StringBuilder.append方式 */

private static void stringAppend3() {

for (int i = 0; i < frequency; i++) {

StringBuilder sb = new StringBuilder();

sb.append("产品名称 : ").append(productName).append(" , 价格 : ").append(productPrice).append(" , 生产地 : ").append(productAddress);

String result = sb.toString();

}

}

/** 输出时间和内存信息 , 并初始化变量 */

private static void printInfoAndClear() {

System.out.println("耗时 : " + (System.currentTimeMillis() - beginTime) + " , 内存 : " + (memory - runtime.freeMemory()) / 10000 + "W");

beginTime = System.currentTimeMillis();

memory = runtime.freeMemory();

}

}

对比结果如下 :

MethodTime (ms)   Memory Usage (long / 10000)+9671String.format601879StringBuilder.append4536    可以看到StringBuilder.append的执行时间和内存占用都是最优的 . '+' 运算符比直接调用StringBuilder.append要慢上不少 , 特别是要连接的字符串数量较多时 , 内存占用也特别大 . String.format由于每次都有生成一个Formatter对象 , 从时间和内存占用上都最差 .

但在实际的业务场景中 , 我们为了程序的可读性 , 简洁等因素 . 往往直接使用'+'拼接 . 而在需要数据转换的时候 , 如日期转换 , 数字转换等 , 可以直接用String.format来拼接 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值