gpt4 book ai didi

java - 当 Java String 溢出时会发生什么?

转载 作者:行者123 更新时间:2023-12-03 20:22:31 31 4
gpt4 key购买 nike

据我了解,Java Strings只是一个字符数组,最大长度是一个整数值。如果我明白this answer正确地,有可能导致字符串溢出 - 尽管是在“异常情况”中。

Since Java Strings are based on char arrays and Java automatically checks array bounds, buffer overflows are only possible in unusual scenarios:

  1. If you call native code via JNI
  2. In the JVM itself (usually written in C++)
  3. The interpreter or JIT compiler does not work correctly (Java bytecode mandated bounds checks)

如果我错了请纠正我,但我相信这意味着您可以在数组边界之外写入,不会触发 ArrayIndexOutOfBounds(或类似的)异常.

我在 C++ 中遇到过缓冲区溢出问题,我可以找到很多关于 other languages 的建议,但没有具体回答如果在 Java 中使用字符串(或任何其他数组类型)导致缓冲区溢出会发生什么情况。

我知道 Java 字符串是边界检查的,并且不能单独被 native Java 代码溢出(除非编译器或 JVM 中存在问题,如上面的第 2 点和第 3 点),但第一点暗示在技术上可以将 char[] 置于...不希望的位置。

鉴于此,假设上述内容正确,我有两个关于 Java 中此类问题行为的具体问题:

  1. 如果一个字符串可以溢出,当它溢出时会发生什么?
  2. 这种行为会产生什么影响?

提前致谢。

最佳答案

为了回答你的第一个问题,我很幸运实际上导致了这样的错误,并且执行只是停止抛出这些错误之一:

java.lang.OutOfMemoryError: Requested array size exceeds VM limit

这就是我的情况,我不知道这是否表示 C 和 C++ 中的缓冲区溢出等安全问题。

关于java - 当 Java String 溢出时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60755838/

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