创建一个类,它包含一个定义时就被初始化的String域,以及另一个通过构造器初始化的String域,这两种方式有什么不同?
尽量在声明时初始化,除非因为某些不确定因素非要在构造时初始化。性能上差距非常大,我给你一个例子,你自己运行一下: ----------------------------------------------------------------------------------- class A { private String str = new String(); } class B { private String str; public B () { str = new String(); } } public class Test { public static void main (String args[]) { long time = System.nanoTime(); new A(); time = System.nanoTime() - time; System.out.println("第1个 A:" + time + " ns"); time = System.nanoTime(); new A(); time = System.nanoTime() - time; System.out.println("第2个 A:" + time + " ns"); time = System.nanoTime(); new A(); time = System.nanoTime() - time; System.out.println("第3个 A:" + time + " ns\n"); long time2 = System.nanoTime(); new B(); time2 = System.nanoTime() - time; System.out.println("第1个 B:" + time2 + " ns"); time2 = System.nanoTime(); new B(); time2 = System.nanoTime() - time; System.out.println("第2个 B:" + time2 + " ns"); time2 = System.nanoTime(); new B(); time2 = System.nanoTime() - time; System.out.println("第3个 B:" + time2 + " ns"); } } ----------------------------------------------------------------------------------- 运行结果: 第1个 A:609246 ns 第2个 A:3593 ns 第3个 A:3592 ns 第1个 B:5291266817909 ns 第2个 B:5291267235707 ns 第3个 B:5291267645806 ns ----------------------------------------------------------------------------------- 从结果可以看到,创建第一个 A 的对象所用时间就比创建一个 B 对象短得多; 并且 A 是属于“一劳永逸”型,从数据可以看到,从第二个 A 开始又比第一个缩短了好几个数量级的时间。