我在EJB类中使用java方法遇到了一种奇怪的行为。
我有几个Integer
,声明如下:
Integer decimalDigit = null;
Integer decimalExponent = null;
我将它们与其他参数一起传递给以下方法。
public void GetPrecision(Currency cur, String nodeCode, Integer decimalDigit, Integer decimalExponent) {
decimalDigit = new Integer(cur.getDecimalDigit());
decimalExponent = new Integer(cur.getDecimalExponent());
if (!CommonHelper.isNullOrEmptyOrBlank(nodeCode)) {
Node tempNode = nodeListProvider.getNodeList().get(nodeCode);
if (tempNode != null && tempNode.getDecimalDigit() != null) {
decimalDigit = (int) tempNode.getDecimalDigit();
decimalExponent = 0;
}
}
}
使用new运算符在方法中正确地解释了2个对象,并且它们保持这样直到调用结束,但是,一旦我离开,2个变量再次为空。
我无法解释这种行为,任何提示?
提前致谢
答案 0 :(得分:1)
参数按值传递,但方法接收引用的副本,而不是直接接收整数的引用。
因此,方法内任何参数的赋值都不会改变您传递的参考引用的值。
您的方法应该返回包含两个Integer
的结构实例(数组或自定义类)。
除了名为GetPrecision()
的方法预计会返回一些东西。
答案 1 :(得分:0)
如果cur.getDecimalDigit()和cur.getDecimalExponent()都产生null,则decimalDigit和decimalExponent在任何后续值set时仍将为null。请检查cur.getDecimalDigit()和cur.getDecimalExponent()值。 / p>
答案 2 :(得分:0)
您指的是局部变量,其范围以这些行的方法结束:
decimalDigit = new Integer(cur.getDecimalDigit());
decimalExponent = new Integer(cur.getDecimalExponent());
因为您已将它们声明为正式参数。
重写方法以解决问题:
public void GetPrecision(Currency cur, String nodeCode, Integer a, Integer b) {
//method body
}
使用a
和b
之类的标识符是不好的做法,但是你遇到了问题。