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