答案 1
与线程有关的任何内容...:)
也:
- 重写方法并期望它们在版本之间以相同的方式使用
- 关于底层平台的假设(例如,文件分隔符)
- 垃圾回收/最终确定的详细信息
- 有关类初始化的一些详细信息
- Integer.valueOf(等)是否返回相同的对象
- 性能、延迟和内存使用情况
答案 2
Java中非常非常少的未定义行为,与C / C++相比,它是一个定义得更明确的平台。这样做的原因是,C/C++编译器旨在为非常不同的平台生成代码,因此被授予相当广泛的自由,以防止过于严格的要求迫使编译器为给定平台生成次优代码。
Java牺牲了其中的一些,以非常精确的方式定义了几乎所有的行为,并且只允许很小的自由度。这当然使平台更容易处理。
发生未定义行为的主要领域是多个线程的确切时间和调度(正如Tom Hawtin已经提到的)。
有几个地方的行为并不明显,“虽然,所以它可能看起来没有定义,但不是(奥斯卡·雷耶斯给出的字符串比较例子就是一个很好的例子)。
还有一些地方的行为被定义为未定义(例如,HashMap中的元素顺序被定义为依赖于实现的,不需要是恒定的)。
推荐