Android 两个具有相同值的整数不正确相等

发布于 2024-12-12 02:27:49 字数 478 浏览 0 评论 0原文

我不是java人,所以我不确定这是否只是一个语言问题。

我正在编写一个 Android 应用程序。在应用程序中的某一时刻,我与整数(版本号)进行比较,以查看它们正在使用的应用程序版本,如果它们不是最新的,则执行某些操作。我注意到我的操作代码始终在运行。因此,我使用调试器进行了检查,并检查它们是否正在运行正确的版本,我有这样的代码:

if (savedVersionCode != currentVersionCode){
   //perform work
}

savedVersionCodecurrentVersionCode 都是整数并且等于相同的值(在本例中为 226),但它仍然会跳入并执行工作。

我确实注意到,虽然这两个值都是 226,但每个整数(如果您在 eclipse 中检查它)都有一个 id 并且它们都是不同的。

对这里发生的事情有什么想法吗?

I'm in not a java guy, so I'm not sure if this is just a language issue.

I am writing an Android app. At one point in the app I compare to intgers (version #) to see what version of the app they are using, to perform some action if they are not up to date. I notice that my action code is always being run. So I checked with a debugger and where I check to see if they are running the correct version, I have code like this:

if (savedVersionCode != currentVersionCode){
   //perform work
}

both savedVersionCode and currentVersionCode are Integers and are equal to the same value (226 in this case), but it still jumps in and performs the work.

I do notice that although that values are both 226, each integer (if you inspect it in eclipse) have an id and they are both different.

Any ideas on whats going on here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深陷 2024-12-19 02:27:49

如果它们是Integer值,则您正在比较引用。两个不同的对象可以有效地表示相同的数字。尝试:

if (savedVersionCode.intValue() != currentVersionCode.intValue())

if (!savedVersionCode.equals(currentVersionCode))

请注意,您可能已经使用了较低的数字,因为自动装箱将为 0 附近的小范围内的数字返回相同的引用。例如:

Integer x = 5;
Integer y = 5;
System.out.println(x == y); // Prints true

x = 1000;
y = 1000;
System.out.println(x == y); // *Could* print true, but probably won't

If they're Integer values, you're comparing the references. Two different objects can effectively represent the same number. Try:

if (savedVersionCode.intValue() != currentVersionCode.intValue())

or

if (!savedVersionCode.equals(currentVersionCode))

Note that you may well have managed with lower numbers, as autoboxing will return the same references for numbers in a small range around 0. So for example:

Integer x = 5;
Integer y = 5;
System.out.println(x == y); // Prints true

x = 1000;
y = 1000;
System.out.println(x == y); // *Could* print true, but probably won't
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文