我正在开发一个包含Arrays的Android项目。我知道Java是一种passByValue语言,但对象有一些例外,而数组是对象。这就是我想要做的:首先我要去检查EditText是否为null,如果为null我将为我的float数组设置null如果不是我想从EditText中放入值。
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。这种方式是否正确?或者有人可以提出另一种方式吗?
答案 0 :(得分:0)
在Java 中,您总是按值传递。没有例外。您看到的问题是,当您将引用传递给对象时,您会通过值传递引用,而不是对象。因此,您获得了引用的副本,但原始副本和副本都指向同一个对象。
所以,如果你这样做
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个不同的变量/引用(list1
和list2
),它们指向同一个列表对象。并且,如果您通过引用传递参数,因为您使list2
无效,您将在NullPointerException
中拥有Point 2
(在Java中不会发生这种情况)。