【问题标题】:String variable not working - but hard-coded does... (JAVA)字符串变量不起作用 - 但硬编码确实......(JAVA)
【发布时间】:2013-02-14 11:15:30
【问题描述】:

我在 Java 中有以下问题:

这可以正常工作:

xyz.setUserValue("ABC", "file_xyz.abc");

但这不是:

String test = "file_" + VariableXYZ.toLowerCase() + ".abc";
System.out.println(test);
xyz.setUserValue("ABC", test);


--> println(test) 的输出 ==> file_xyz.abc
奇怪的是它以前有效,但从一个时刻到另一个时刻它都没有。 爪哇错误? - 有什么想法吗?

先谢谢了!!

【问题讨论】:

  • 你能把你看到的错误信息包括进来吗?
  • 您能否发布重现问题的完整代码。可能只有main 方法。
  • 这怎么行?您看到了什么错误或不当行为?
  • 还有xyz.setUserValue() 代码。
  • 一个疯狂的猜测:您是否在某个地方测试 xyz.getUserValue()=="file_xyz.abc"?这种比较在第一种情况下会“起作用”,在第二种情况下会失败(字符串内容比较应该使用 equals(..) 方法)

标签: java string hardcoded


【解决方案1】:

不,这不是 Java 错误。

无法说实际上是什么造成了这种情况,但不可能是 Java 错误。

如果您更好地解释上下文并向我们展示setUserValue 方法的代码,我们可能会提出合理的理论。 (SSCCE 是理想的,但我强烈怀疑您将无法编写一个可靠地证明问题的代码......)


好吧:

public static String setUserValue(String key, String value) { 
    String oldValue = getUserProperties().getProperty(key);
    getUserProperties().setProperty(key, value); 
    return oldValue;
}

...然后假设“属性”对象是Properties 的实例,最可能的解释是:

  • 某些原因导致getUserProperties() 在第一次和第二次调用中返回不同的对象,
  • 在第一次和第二次调用之间修改了 Properties 对象,
  • Properties 对象的“ABC”值与您预期的不同,或者
  • 其他东西正在将属性更改回其原始值;例如通过从源文件重新加载属性。

或者也许有一个你没有告诉我们的例外......或者已经被压扁了。或者您可能以错误的方式比较字符串(使用==),这让您/您的程序感到困惑。

或者,也许您在构建和/或部署东西的方式上遇到了问题。

【讨论】:

  • 问题是我什么都不比较
  • FrameworkSettings.setUserValue("OWIL.IOW_FILE", "settings/iowfiles/sauxz3_" + Umgebung.toLowerCase() + ".iow"); --> 不工作
  • 但是我使用了一个日志文件并将“Umgebung”的内容写入其中 --> 内容很好,但属性没有改变
  • 好的。如果您不相信这些解释,我认为您应该提供 SSCEE。而且“正如我所提到的 - 它以前工作过” ... IMO,这只能意味着你已经改变了一些东西!
  • George:结果不一致的另一种可能性是多线程程序中的错误。您是在一个线程中写作并从另一个线程中阅读吗?
猜你喜欢
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多