看到一个叫王垠的人写了一篇文章,叫做《Java 有值类型吗?》。我发现他的思路和我之前的两个观点有点像。
C语言只有值类型
我以前经常说C语言参数只有一种传递方式,就是值传递。因为指针也是值呀,指针是一个字宽度的地址值,相当于一个整形long。指针传递其实就是把这个地址值拷贝一份而已。这个问题对Java也是一样的,因为Java的引用类型就相当于指针。
不可变类型与值类型
不可变类型与值类型,在逻辑上是一致的。因为之前发现不可变类型可以被编译器安全地优化为值类型。而值类型也完全可以看作是不可变类型,对值的修改其实是新建了一个不可变类型。
总结
其实这个问题是大家对“值”的概念定义的问题。嗯,殊途同归。