【碎碎念】读《Java有值类型吗?》有感
观点: 通过实现“值类型”,实现inline优化,又不改变Java全是引用类型的语义。 论据 思想实验: int x = 1; // x指向内存地址A,内容是整数1 int y = x; // (记住这个y) y指向同样的内存地址A,内容是整数1 x = 2; // x指向另一个内存地址B,内容是整数2。y仍然指向地址A,内容是1。 System.out.println(x); System.out.println(y); // out: // 可以看到 // 2 // 1 引用类型特有那些操作? dereference;例如C中*a struct的分量访问和修改;例如,C中的a.foo = 1 而对于「基本类型」,以上操作均不能实现。 前者由于Java不提供;后者由于「基本类型」不是复合类型,也就无法实现。 引用= 的语义? 将引用绑定给一个新的对象。 那么我们的「基本类型」能做什么事情? 读取它的值 修改它的值 那么,实际上,值类型的实现和引用类型的实现本质上的结果完全一致。 由此得出结论,对于「基本类型」,值类型和引用类型等价。 对这篇文章的疑惑 语义上,我们难道不是按照值类型的语义来传递参数的吗? 难道按照引用传递,不属于引用类型的语义吗? public void test() throws Exception{ int x = 2; foo(x); // 传递了值 System.out.println(x); } public static void foo(int x) { x = 3; } // out: // 可以看见传递了值 // 2 参数传递的语义? 值传递:将值拷贝一份绑定给参数。...