Tom*_*ine 15
与线程有关... :)
也:
Joa*_*uer 12
Java中存在非常非常少的未定义行为,与C/C++相比,它是一个更加明确的平台.这样做的原因是C/C++编译器旨在为非常不同的平台生成代码,因此被授予相当宽的自由度,以防止过于严格的要求会迫使编译器为给定平台生成次优代码.
Java通过以非常精确的方式定义几乎所有行为并且仅允许很小的自由度来牺牲其中一些.这当然使平台更容易处理.
发生未定义行为的主要区域是多个线程的确切时间和调度(正如Tom Hawtin已经提到的那样).
有几个行为不明显的地方,'但是,它可能看起来未定义,但不是(Oscar Reyes给出的字符串比较示例是一个很好的例子).
并且行为被定义为未定义的一些地方(例如,HashMap中的元素的顺序被定义为依赖于实现并且不需要是常量的).