gpt4 book ai didi

java - Kotlin 中的一切都是对象吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:59:41 27 4
gpt4 key购买 nike

我在好几个地方都读过这篇文章。但是并没有真正理解其中的含义。您可以阅读关于 kotlinlang 的简短文档:

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

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

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

我在别处读到以下声明:

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

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

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

var x = 5 

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

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

enter image description here

但是下面的代码片段和我用 Java 得到的一样。

fun main() {
var x = 5
var y = x
x = 15
println("Hello, world!!! $y")
}

输出是5。不过我觉得应该是15,因为它是一个对象,也是对它的引用。可能我对Kotlin的理解有点笨。这就是我对 Java(或 Kotlin)等编程语言中变量和引用以及内存管理的理解。

enter image description here

最佳答案

让我们认为它们是对象而不是基元

var x = 10

10 的引用分配给 x

var y = x

x 的引用分配给 y

x = 5

5 的引用分配给 x所以 x 的引用发生了变化,但 y 保留了 10

的引用

另一种方式

如果你能做到这一点

x.changeSomeOfMyProperties()

然后更改将应用​​于 xy 但是,因为它们是原语,所以你不能做那种事情。基元是 kotlin 中的类,所以很难理解它们是如何工作的,你可以查看 Primitives.kt

关于java - Kotlin 中的一切都是对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57296152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com