论坛首页 Java企业应用论坛

JAVA6可以使用字符串累加

浏览 17283 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-05-13   最后修改:2011-05-13
Crusader 写道
skzr.org 写道
qianhd 写道
不要写任何依赖语法糖 依赖编译器的代码
久而久之 你就总会以为有虚拟机给你优化
这是不好的习惯

 

Crusader 写道
这个讨论意义不大
代码不应该依赖于jdk版本或者JVM实现
否则可移植性太差了



两位有点过于追求完美了,你不会从jdk1.6切换会jdk1.4以下吧。

我指导得最多的就是不要在简单的sql拼接时使用过多stringbuild,比如:
  execute("select * from " + tableName + " where id=?", 1);

有人过度强调原则,如前两位,结果写了
  execute(
    new StringBuilder("select * from ").append(tableName).append(" where id=?"), 1);

如果给人看还是直接+更加容易读

所以需要权衡,我的一般原则:
  1. 循环中操作字符串,使用StringBuilder
  2. 如果字符串特别长,同时还不能一次使用+完成所有操作 时使用StringBuilder


这个只是个人经验。

 

如果只是为了易读性,个人认为得不尝失

而且并不一定是为了向前兼容,也可能是平行,向后,谁也能保证JVM(不同厂商,不同版本)会不会优化,如何优化

如果觉得使用StringBuilder来进行累加不麻烦,其实也可以,虽然易读性差点。就怕人偷懒写成这样就悲剧了。new StringBuilder("select * from ").append(tableName).append(" where id in ("+userIdString+")");这样让编译器情何以堪!

0 请登录后投票
   发表时间:2011-05-13  
解释的真详细,thx
0 请登录后投票
   发表时间:2011-05-13  
fantasy 写道
String s="aa"+"bb"+"cc";

 

这个干嘛不直接写成

String s="aabbcc";

0 请登录后投票
   发表时间:2011-05-13   最后修改:2011-05-13
miaofm 写道
fantasy 写道
String s="aa"+"bb"+"cc";

这个干嘛不直接写成
String s="aabbcc";

因为实际的状况可能是:
String message = "Crusader 写道\n"
    + "这个讨论意义不大\n"
    + "代码不应该依赖于jdk版本或者JVM实现\n"
    + "否则可移植性太差了";

0 请登录后投票
   发表时间:2011-05-13  
jdk 一直都有这个功能,不要把编译器想得那么笨,
这个应该是编译器文档里面承诺了会这样做的,所以不会担心编译器依赖问题。
0 请登录后投票
   发表时间:2011-05-13   最后修改:2011-05-13
看了这篇文章,忽然想试试另外的编译器优化:
		final String a = "aa";
		final String b = "bb";
		final String h = a + b;
		System.out.println(h);
		System.out.println(h + "cc");

编译后是什么样子?
     0  ldc  [16]
     2  astore_1 [a]
     3  ldc  [18]
     5  astore_2 [b]
     6  ldc  [20]
     8  astore_3 [h]
     9  getstatic java.lang.System.out : java.io.PrintStream [22]
    12  ldc  [20]
    14  invokevirtual java.io.PrintStream.println(java.lang.String) : void [28]
    17  getstatic java.lang.System.out : java.io.PrintStream [22]
    20  ldc  [34]
    22  invokevirtual java.io.PrintStream.println(java.lang.String) : void [28]


相当于:
		final String a = "aa";
		final String b = "bb";
		final String h = "aabb";
		System.out.println("aabb");
		System.out.println("aabbcc");

所有,要尽量使用常量。

PS: java编译器到现在还不支持尾递归,强烈BS之……
0 请登录后投票
   发表时间:2011-05-14  
不要光看这些优化的,你亲自写个循环20万的试试,立竿见影.

花时间研究理论如果一辈子用不上的话,不如亲自上手试试,你还能记住一辈子
0 请登录后投票
   发表时间:2011-05-15  
有人会这么写吗? "aa"  + "bb"
直接“aabb” 不好吗
0 请登录后投票
   发表时间:2011-05-15  
有意思吗码农们?
0 请登录后投票
   发表时间:2011-05-15   最后修改:2011-05-15
xly_971223 写道
有人会这么写吗? "aa"  + "bb"
直接“aabb” 不好吗

当拼接复杂SQL语句的时候会。
当拼接日志的时候会。

这样做主要是让代码更加易读,如果直接写在同一行里,超过一定的数量,java编辑器出现横向滚动条。
那么当你看代码的时候既要竖向托滚动条,又要横向拖动滚动条

如:
String sql = "select ... from user"
             +" left out join userGroup ....."
             +" left out join B ....."
             +" where ..."
             +" order by user_name,.. desc";
            

                    
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics