Java通过引用传递布尔列表

时间:2017-06-30 03:21:41

标签: java arraylist javafx pass-by-reference pass-by-value

是否可以通过引用传递我的类属性的引用? 例如:

public class Myclass{
  private Boolean FRinCreation=false,
                  NFRinCreation=false, 
                  DSinCreation=false,
                  FRinEdit=false,
                  NFRinEdit=false,
                  DSinEdit=false;

  List<Boolean> getTabBools(ETargetReq req){
    switch (req){
      case ETR_FUNCTIONAL:
        return Arrays.asList(FRinCreation, FRinEdit);
      case ETR_NONFUNCTIONAL:
        return Arrays.asList(NFRinCreation, NFRinEdit);
      case ETR_DATASET:
        return Arrays.asList(DSinCreation, DSinEdit);
      case ETR_UNKNOWN:
        return null;
      default:
        return null;
    }
  }

  boolean otherFunction(){

    //Change the FRinCreation to true
    getTabBools(ETR_FUNCTIONAL).set(0, true);
  }

不幸的是,如果我执行它,这不会将我的class属性值设置为true。你能帮助我吗?我对javas传递值感到有点困惑。

1 个答案:

答案 0 :(得分:1)

在Java中,所有对象都通过引用传递,而不是基本数据类型 例如int,boolean,double。

通过引用传递的含义是什么:

  1. 当我们创建对象变量时,它只是指向堆中某个对象的变量。
  2. 如果我们改变对象属性的值,那么它将反映在堆存储对象中。
  3. 这就是指向该堆对象值的每个变量引用都被更改的原因。
  4. 在您的示例中,FRinCreation变量指向堆上的布尔对象。

    此后,您将这些对象存储在列表中,List是对象保持对象引用列表。 当您在索引0处设置值时,它将更新索引0处的引用,指向FRinCreation为其他内容。

    FRinCreation仍然指向错误的原因。

    底线是: 如果您希望更改对象值,则更改对象内的属性而不是对象引用。