【发布时间】:2018-03-31 01:58:03
【问题描述】:
Java 被认为是一种 OOP 语言,尽管它不是纯粹的 OOP。 Java 包含 8 个原语,在 interview,James Gosling 中解释了原因:
Bill Venners:为什么 Java 中有原始类型?为什么没有 一切都只是一个对象?
James Gosling:完全是效率问题。有各种各样的 建立了 int 和 that 都是对象的系统的人。 有多种方法可以做到这一点,而且它们都有一些 相当严重的问题。其中一些只是缓慢,因为它们 为所有内容分配内存。他们中的一些人尝试在哪里做对象 有时它们是对象,有时它们不是(这就是 标准 LISP 系统做到了),然后事情变得非常奇怪。很亲切 作品,但很奇怪。
因此,内存和速度似乎都是 Java 原语解决的问题。然而,这让我想一种语言怎么可能是真正的、纯粹的面向对象的?
如果只存在一个字节原语,您可以从那里构建。创建整数、字符以及最终的浮点数和双精度数。但是根本没有任何基础结构,你怎么能建造任何东西呢?至少一些基本原语不是必需的吗?换句话说,扩展时不需要基础数据结构吗?
【问题讨论】:
-
如果我没记错的话,Kotlin 中的一切都是对象。有 var 和 val 关键字和类型推断。
-
@ND523 在 Kotlin 中一切都显示为对象,但编译器尽可能将它们映射到 JVM 原语以节省内存source
-
JavaScript 是另一个例子,其中所有原语都是真正的对象。例如。
let a = 4; tyeof a;(“数字”)a.toFixed(2)(“4.00”)。 toFixed 是 Number 类型/类的实例方法。甚至文字也被“包装”到它们的类型类中:(42).toFixed(2)("42.00") 或"test string".toUpperCase()("TEST STRING") -
我看起来仍然像 Javascript has primitives,但可以在几分之一秒内变成 coerced into an object,以允许使用属性和方法。它们仍然是基元,对象在使用时立即被丢弃。
-
@EthanBar 我知道你在找什么。您可能想在问题中澄清这一点。
标签: oop object types primitive paradigms