我有几个问题:
关于对象和原始引用的创建 值(value)观,我想知道:什么时候通常适合存储 变量中的值?
根据我的常识,经验法则是创建 当相同的值被 多次使用或避免引用时 硬编码 例如
String name = "Bob"; System.out.println("Welcome " + name + ". Is your name really " + name + "?");
而如果像下面的例子那样只使用一次,它会 只需执行以下操作即可提高性能。
System.out.println("Welcome Bob");
相对于
String name = "Bob"; System.out.println("Welcome " + name + ".");
添加的问题:如果我们讨论的是在遍历数组或可枚举对象时使用的变量,以下哪一个会更高效(假设我们正在遍历一个对象,例如 1万次)?还是没有区别而只是一种风格选择?
例如,
// nameArray is an extremely long array public static void loop(String[] nameArray) { String name; //Should this be declared inside the loop? int len = nameArray.length(); for(int i = 0; i < len; i++) { name = nameArray[i]; System.out.println(name); } }
或者这会更受欢迎吗?
// nameArray is an extremely long array public static void loop(String[] nameArray) { int len = nameArray.length(); for(int i = 0; i < len; i++) { String name = nameArray[i]; //Declare String reference inside for loop System.out.println(name); } }
关于垃圾回收,在引用对象/基元之后 已经过了它的使用生命周期,是否总是好的做法设置 该值设为 null 以使其符合垃圾回收条件(假设没有其他对该对象/原始值的引用)?
例如,
String name = "Bob"; System.out.println("Welcome " + name + ".); name = null;
预先感谢您抽出宝贵时间查看此内容。
最佳答案
不,这没有区别 - 无论您是否使用局部变量来引用它,该对象都会被分配。使用任何更具可读性的内容。
显式将值设置为 null 几乎从不是好的做法。有一些极端情况,例如当不这样做时会持有对变量的不必要引用,否则这些变量将有资格进行垃圾收集(参见示例:Effective Java - Item 6: Eliminate obsolete object references)。在所有其他情况下,尽可能限制变量的范围是帮助垃圾收集器的最有效方法。
底线是:在需要时使用变量并让垃圾收集器完成它的工作,除非你有令人信服的理由不这样做。
关于java - 何时创建引用、存储值并将引用设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34285224/