gpt4 book ai didi

java - 在 Java 中取消引用 `null` 时是否可能产生未定义的行为?

转载 作者:IT王子 更新时间:2023-10-28 23:32:31 27 4
gpt4 key购买 nike

我刚刚了解到在 C 和 C++ 中取消引用 null 有时会产生 undefined results .这对我来说非常有趣,就像所有奇怪的编程行为一样(我曾经有人告诉我,他们在合法的生产环境中调试了“损坏的 RAM - 程序没有按书面方式运行”)。因为我主要是一名 Java 开发人员,所以我想知道这种情况是否也可以在该语言中发生?

JLS 没有具体说明 null 引用的实现方式(3.10.74.115.8.1),所以我不太确定。但我在想,可以通过 Unsafe API 直接操作内存地址来实现。 .不幸的是,我对 JVM 的内部运作没有足够的了解,无法知道这是否可能。

如果可能,那么恶意程序也有可能这样做,这将引发一个有趣的安全问题。

那么:Java 在取消引用 null 时是否可能出现未定义的行为,而不是简单地抛出 NullPointerException

最佳答案

JLS 没有具体说明空引用是如何实现,但它指定了它的行为。换句话说,没有未指定的行为。如果您遇到 JLS 中未指定的行为,那就是错误。

让我澄清一下:您可以使用 native 代码来破坏某些结构以使 JVM 崩溃,但这与任何 Java 行为无关。但是在典型的 JVM 实现中,null 行为的实现是你最不想打扰的事情。没关系,如果您从 native 代码覆盖任意内存,什么您会丢弃。

“未指定的行为”意味着规范本身允许结果行为存在差异。 Java 并非如此。

关于java - 在 Java 中取消引用 `null` 时是否可能产生未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501966/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com