Kotlin 中的一切都是对象吗?

Tor*_*n G 5 java oop object kotlin

我在好几个地方读过这篇文章。但是不是很懂意思。您可以阅读有关 kotlinlang 的简短文档:

“在 Kotlin 中,一切都是对象,因为我们可以在任何变量上调用成员函数和属性。一些类型可以有特殊的内部表示——例如,数字、字符和布尔值可以在运行时表示为原始值——但对用户来说,它们看起来像普通的类。”

什么是特殊的内部表示?是什么意思,可以在运行时表示为原始值?

是否只能调用像 toInt() 这样的转换函数?和扩展功能?

在其他地方,我已经阅读了以下声明:

“对于来自 java 的原始数据类型,kotlin 有专门的数组类型,如 ByteArray”。这是否意味着我只能在 Kotlin 中使用 intArrayOf(1, 2, 3) 或 IntArray(5) 等函数创建数组?

我从 Head First Kotlin 一书中发现的另一个令人困惑的陈述:

“当您使用以下代码声明变量时:

var x = 5 
Run Code Online (Sandbox Code Playgroud)

您分配给变量的值用于创建新对象”。

“当一个对象被分配给一个变量时,对象本身不会进入变量。对对象的引用改为进入变量:”

在此处输入图片说明

但是下面的代码片段与我使用 Java 得到的相同。

fun main() {
    var x = 5
    var y = x
    x = 15
    println("Hello, world!!! $y")
}
Run Code Online (Sandbox Code Playgroud)

输出是 5。但我认为它应该是 15,因为它是一个对象和对它的引用。也许我理解 Kotlin 有点愚蠢。这就是我对 Java(或 Kotlin)等编程语言中变量和引用以及内存管理的理解。

在此处输入图片说明

Ben*_* P. 1

输出是5。但我认为应该是15

我们可以了解一下这个示例中发生的情况。

var x = 5
Run Code Online (Sandbox Code Playgroud)

创建一个Int保存值的对象 5. 创建一个变量x,并x指向这个新Int对象。

var y = x
Run Code Online (Sandbox Code Playgroud)

创建一个变量y,并指向y当前x指向的任何内容(Int对象)。

(请注意, 和 并不是同一个指针的两个名称。相反,和是完全不同的,但两者碰巧都指向同一事物。)xyxy

x = 15
Run Code Online (Sandbox Code Playgroud)

创建一个Int保存值 5 的对象。使x变量指向这个新Int对象。

(这是流程中的关键点。当我们分配 时x = 15,我们正在改变 wherex点,但我们根本没有影响yy仍然指向它以前使用的相同的东西(Int持有 5))。

println("Hello, world!!! $y")
Run Code Online (Sandbox Code Playgroud)

向用户显示一些东西。要确定用什么来替换$y,请跟随指针并查看它指向的内容。y只被赋值一次,所以它仍然指向它所指向的第一个东西(持有Int5)。