整数对象在方法中正确实例化,但返回null

时间:2017-02-07 14:55:56

标签: java

我在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个变量再次为空。

我无法解释这种行为,任何提示?

提前致谢

3 个答案:

答案 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   

}

使用ab之类的标识符是不好的做法,但是你遇到了问题。