String

new String(bytes,encoding)

   java中的String类是按照unicode进行编码的。
   encoding所指的是bytes中的数据是按照encoding那种方式编码的,而不是最后产生的String是什么编码方式,最后产生是的unicode编码。
   换句话说,是让系统把bytes中的数据由encoding编码方式转换成unicode编码。如果不指明,bytes的编码方式将由jdk根据操作系统决定。

格式化字符串

    前面补0指定数字长度:String today=String.format("%4d-%02d-%02d",year,month+1,day);

    更多java格式化字符串

    http://www.360doc.com/content/12/0203/16/2795151_183912398.shtml

拼字符串的效率

   String sql =“a”+“b”+“c”+...;

   和
   StringBuffer buff = new StringBuffer();
   buff.append("a");
   buff.append("b");

   buff.append("c");

    ...
   String sql = buff.toString();


    自以为使用StringBuffer优化了代码,却不知道这样子内存开销更大,效率更差。因为中间有几个append就出现几个中间的String,同时StringBuffer的capacity还要从默认的16,扩容多次。而用+,由于中间全是静态的,编译器会自动优化成一个String。

    StringBuffer的好处就是代码使用舒服,当buff添加完成之前被传递时,有一个统一的对象来管理字符串。


   同样,变量声明在for内外,对于GC来说,根本没有太大区别。先不论gc时机和具体回收的堆内容的不确定性,就光看栈引用和堆对象的关系而言,两种写法都只会新创建N个堆对象,同时,任意时刻,都只有一个栈引用一个堆对象。除了循环之后,最后一个有些许差别外,其余,根本看不出任何在“性能”上,某种写法压倒另外一种写法的理由。

   不要刻意追求GC,那个是保不齐的。
   首先要与己方便,然后才能与人方便。需要在循环外面用到的,那就放在外面,否则一律应放入循环体内。
   有时候,刻意优化,反而效果更差。

没有更多推荐了,返回首页