java原始数据类型都有哪些_关于类型:为什么Java中有原始数据类型?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

When we have wrappers classes, why primitives are supported?

如果有Wrapper类使Java成为纯面向对象的语言,那么为什么会有可在Java中使用的Primitive数据类型呢?

在这里,您可以阅读有关基本类型的更多信息。 stackoverflow.com/questions/12670817/ stackoverflow.com/questions/12836522/

在这里检查stackoverflow.com/questions/6151497/

@GanGnaMStYleOverFlowErroR:它不能解释为什么存在原始类型。

链接没有给我答案,如果我们已经在Java中拥有包装器类,为什么还会存在原始数据类型?

有传言称原语将在Java 10中消失。

@ user2003432检查此链接stackoverflow.com/questions/12670817/

@GanGnaMStYleOverFlowErroR不,自Java 1.0起就存在包装类,如Integer等;它们在Java 1.4中不是新的。

这些链接仅给出"什么是原始数据类型",我想知道"为什么原始数据类型"

现在检查链接。

@Jesper oops,似乎我在将黑白自动装箱(在1.5中引入)与包装器类混淆了,尽管:)

实际上,我听说关于从Java 10开始消除原始数据类型存在一些争论。

为了效率。基本类型的变量直接包含值。非基本类型的变量是引用,引用存储在内存中其他位置的对象。

每次您需要使用包装器类型的值时,JVM都需要在内存中查找对象以获取该值。基本类型不需要此操作,因为变量本身包含值,而不是引用包含该值的对象。

但是,这并不能解释为什么原始类型必须在Java编程语言中显式可见。 Java语言和JVM的设计者可能选择隐藏语言本身的原始类型,以便将所有内容都视为对象。然后,编译器可以将其转换为更有效的原始类型。

一些在JVM上运行的较新的编程语言(Groovy,Scala等)使您可以做到这一点:在语言本身中,所有内容看起来都像一个对象,您可以在其上调用方法,但是在底层,编译器将它们转换为原语。

我猜想在Java语言开发之时(在1990年代上半叶)人们没有想到这一点,现在为允许这种语言的彻底改变而为时已晚。

存在原始数据类型的主要原因是,创建对象,分配堆的成本太高,并且会降低性能。如您所知,最常使用int,float等原始数据类型,因此将它们设置为Objects会对性能产生巨大影响。因此,Java设计师认为将其作为非对象会更好。

是的,如果您准备妥协一些性能,但又需要更多OOP设施,则可以使用包装器。因此,在这种情况下,您可以使用包装器。希望这些信息对您有所帮助。

创建对象,分配堆的成本太高,并且会降低性能=>您有参考吗? 有罚款,但罚款不高。

例如,Goetz指出HotSpot 1.4.2和更高版本中new Object()的通用代码路径约为10条机器指令。

基本类型表示单个值,而不是复杂的对象。 尽管Java在其他方面完全是面向对象的,但原始类型不是。 它们类似于大多数其他非面向对象的语言中的简单类型。 原因是效率。 将Java类型作为完整的参考,将原始类型变成对象可能会大大降低性能。

@assylias,是的,惩罚可能更少,但是在创建更多数量的int,float包装器的上下文中,您可以观察到该惩罚

出于性能原因。在某些其他语言中,例如SmallTalk,像int或char这样的类型也是对象,可以在它们上调用方法。从理论上讲,这是正确的,但当前的实现运行速度较慢。原始类型是纯度和性能之间的折衷。

在有更多必要的地方(可能使用空值或与集合框架一起使用),Java提供了包装器类,例如java.lang.Integer和类似类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值