-2

我正在开发一个包含 Arrays 的 Android 项目。我知道 Java 是一种 passByValue 语言,但是对象有一些例外,而数组是对象。这是我想要做的:首先我要检查 EditText是否为null,如果为null,如果不是我想从EditText 中输入值,我也会为我的浮点数组输入null。

EditText acDifSp;
EditText deScMoSp;
EditText toReStVa;
EditText fePuStToVa;
EditText deShDoToVa;
EditText deBoSeSp;
EditText beTem1;
EditText beTem2;
EditText vibVale;
EditText poPuPa;
EditText SlWeinSlPu;

Float   acDifSpFl;
Float   deScMoSpFl;
Float   toReStVaFl;
Float   fePuStToVaFl;
Float   deShDoToVaFl;
Float   deBoSeSpFl;
Float   beTem1Fl;
Float   beTem2Fl;
Float   vibValeFl;
Float   poPuPaFl;
Float   SlWeinSlPuFl;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.setting_page);

    acDifSp=(EditText)findViewById(R.id.editText1);
    deScMoSp=(EditText)findViewById(R.id.editText2);
    toReStVa=(EditText)findViewById(R.id.editText3);
    fePuStToVa=(EditText)findViewById(R.id.editText4);
    deShDoToVa=(EditText)findViewById(R.id.editText5);
    deBoSeSp=(EditText)findViewById(R.id.editText6);
    beTem1=(EditText)findViewById(R.id.editText7);
    beTem2=(EditText)findViewById(R.id.editText8);
    vibVale=(EditText)findViewById(R.id.editText9);
    poPuPa=(EditText)findViewById(R.id.editText10);
    SlWeinSlPu=(EditText)findViewById(R.id.editText11);

EditText[] fields={acDifSp,deScMoSp,toReStVa,fePuStToVa,deShDoToVa,deBoSeSp,beTem1,beTem2,vibVale,poPuPa,SlWeinSlPu};
        Float[] values={acDifSpFl,deScMoSpFl,toReStVaFl,fePuStToVaFl,deShDoToVaFl,deBoSeSpFl,beTem1Fl,beTem2Fl,vibValeFl,poPuPaFl,SlWeinSlPuFl};
        for (int i = 0; i < fields.length; i++) {
            EditText currentField=fields[i];
            if(currentField.getText().toString().length()>0){
                values[i]=Float.parseFloat(currentField.getText().toString());
            }
        }

}

我试过这个是因为,我不想用 if 检查每个 EditText。这种方式正确吗?或者任何人都可以建议另一种方式?

4

1 回答 1

0

在 Java 中,您总是按值传递。没有例外。您看到的问题是,当您传递对 object 的引用时,您按值传递引用,而不是对象。因此,您获得了引用的副本,但原始和副本都指向同一个对象。

所以,如果你这样做

private void addOne(List<Integer> list2) {
    // Point 1
    list2.add(1);
    list2 = null;
}

public void test() {
    List<Integer> list1 = new ArrayList<Integer>();
    addOne(list1);
    System.out.println(list1.size()); // point 2
}

Point 1您有 2 个不同的变量/引用(list1list2)指向同一个列表对象。而且,如果您通过引用传递参数,那么由于您 nullify list2,您将有一个NullPointerExceptionin Point 2(这在 Java 中不会发生)。

于 2013-09-11T10:06:24.637 回答