gpt4 book ai didi

java - 何时创建引用、存储值并将引用设置为空

转载 作者:搜寻专家 更新时间:2023-11-01 02:05:44 24 4
gpt4 key购买 nike

我有几个问题:

  1. 关于对象和原始引用的创建值(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);
    }
    }
  2. 关于垃圾回收,在引用对象/基元之后已经过了它的使用生命周期,是否总是好的做法设置该值设为 null 以使其符合垃圾回收条件(假设没有其他对该对象/原始值的引用)?

    例如,

    String name = "Bob"; 
    System.out.println("Welcome " + name + ".);
    name = null;

预先感谢您抽出宝贵时间查看此内容。

最佳答案

  1. 不,这没有区别 - 无论您是否使用局部变量来引用它,该对象都会被分配。使用任何更具可读性的内容。

  2. 显式将值设置为 null 几乎从不是好的做法。有一些极端情况,例如当不这样做时会持有对变量的不必要引用,否则这些变量将有资格进行垃圾收集(参见示例:Effective Java - Item 6: Eliminate obsolete object references)。在所有其他情况下,尽可能限制变量的范围是帮助垃圾收集器的最有效方法。

底线是:在需要时使用变量并让垃圾收集器完成它的工作,除非你有令人信服的理由不这样做。

关于java - 何时创建引用、存储值并将引用设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34285224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com