int
определяется как 32 бита.Это не изменится с 64-битной и 32-битной виртуальной машиной.То же самое с long
- это 64 бита, и оно не изменится.
double
немного сложнее.Спецификации говорят, что он имеет ширину 64 бита, так что вы можете рассчитывать на это.Некоторые виртуальные машины могут использовать более широкие числа для выполнения математических операций, но вам будет хорошо, если вы всегда будете трактовать double
как 64-битное число (или если вы укажете strictfp
, что должно гарантировать, что числа в точности 64 бита или, по крайней мере, действуют так, как если бы они были.)
Что касается атомарности, то это в некоторой степени зависит от платформы ... но вы будете в безопасности, предполагая, что читаетзаписи во все, что больше, чем int, не atomic (если переменная не помечена volatile
).И все, что включает в себя чтение и запись в одном и том же месте, не является атомарным для любого типа.(Это означает, что ++a;
не является атомарным по своей природе.)