繁体   English   中英

基本类型和原子类型有什么区别?

[英]What is the difference between a primitive type and an atomic type?

许多编程语言规范都谈论该语言的原始类型及其原子类型。 在某些情况下,将分别提及这些内容,而有些则将这些定义混合在一起。 在阅读了一些材料之后,我开始意识到这两个术语之间存在差异,但是看起来要么很微妙,要么太晦涩。

原子类型原始类型之间到底有什么区别? 一个包含在另一个中吗?

不同之处在于原始类型( int等)不是对象; 尽管在Java中,有一些与每种基本类型相关联的类(用于int Integer等)。

原子类型是“只是”常规Java对象; 与“普通”对象的区别在于,操作它们的方法被保证是原子的,因此是线程安全的。 对于int ,它将是AtomicInteger ,您可以原子地递增.getAndSet()等。

但是,谈论“原子类型”与“原始类型”在某种程度上是不正确的,因为某些支持原子操作的类未链接到原始类型。 一个这样的示例是AtomicReference ,但是您也有AtomicIntegerArray和其他一些示例。

另请参阅compare和swap上的Wikipedia条目,或简称CAS。


同样,虽然人们会认为基本类型从根本上讲是线程安全的,但事实并非如此。 每个线程可以具有自己的本地存储(这毫无疑问地称为TLS,线程本地存储)以进行优化,因此可以具有自己的原始变量副本; 这就是为什么在Java中您具有volatile

基本类型是原子的。 换句话说,它们不能被解构为更简单的类型。

在Java中,有原始类型和装箱类型,Box类型是实际对象,而原始类型只是类型的变量。

例如,int是原始类型,而Integer是盒装类型。

int pi; 整数bi;

pi被声明并分配,并且可以立即使用,例如:pi = 100;

声明了bi,但直到以下时间才分配它:bi = new Integer(1);

在分配之前,引用bi将引发java.lang.NullPointer错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM