Java布尔参数在没有任何赋值的情况下更改其值

时间:2012-08-22 09:14:47

标签: java

今天我有一个非常尴尬的经历。 我刚刚调用了Push.payload()方法。

Push.payload(payload, keystore, password, production, token);

(实际上,这段代码片段是javaPNS的一部分) 而Push.payload()只是

public static PushedNotifications payload(Payload payload, Object keystore, String password, boolean production, Object devices) throws CommunicationException, KeystoreException {
    return sendPayload(payload, keystore, password, production, devices);
}
当我调用Push.payload()时,

生产值为true,除了声明之外没有赋值。

private static final boolean production = true;

当然,我在调试模式下的Push.payload()步骤之前检查了它的值是否为真。但是,在Push.payload()方法中,生产值变为false !!

我不知道发生了什么。请解释为什么生产值变为false。

提前致谢。

2 个答案:

答案 0 :(得分:3)

如果你打电话

Push.payload(payload, keystore, password, false, token);

然后production在方法调用中将为false。

如果此值是常量,为什么要将其作为参数传递?如果你不能删除它我建议给它一个不同的名称,例如使用Java Code Convention。

private static final boolean PRODUCTION = true;

答案 1 :(得分:0)

您在调试模块中看到的“生产”变量实际上是方法“Push.payload()”的参数。 如果静态变量的名称与方法中的参数名称相同。 jvm将其视为优先级方法的参数。 所以,我建议您使用像“PRODUCTION”这样的大写字母。你最好用 Xxxxx.PRODUCTION 这种风格更适合阅读。