Dec 10, Be careful use string append

I was implmenting string append feature in my simple VM.

 

I find that when there are string append in JAVA code. The binary codes generated are not the same as I thought.

 

I use a simple test to test it.

	private static void testAdd() {
		String a = "First";
		String b = "Second";
		String c = a + b;
		Asserter.assertTrue(c.equals("FirstSecond"), "testAddEqual");
		Asserter.assertTrue(!c.equals("First"), "testAddNotEqual");
	}

 

The sentence following will generate quite lot of binary code. The most important thing for performance is it use StringBuffer. Yes, it is StringBuffer. So it has performance issue.

 

String c = a + b;

The codes generated are listed following.

     6  new java.lang.StringBuffer [25]
     9  dup
    10  aload_0 [a]
    11  invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [27]
    14  invokespecial java.lang.StringBuffer(java.lang.String) [33]
    17  aload_1 [b]
    18  invokevirtual java.lang.StringBuffer.append(java.lang.String) : java.lang.StringBuffer [36]
    21  invokevirtual java.lang.StringBuffer.toString() : java.lang.String [40]
    24  astore_2 [c]

 method StringBuffer.append is synchronized method. So be careful.

 

Following code also do the same thing. It also use StringBuffer

		String a = "String";
		a = a + 100;
 

Perhaps use some java compiler optimization will make it more efficiently. But I don't have time test it by now.

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值