我已经开始阅读 Project Valhalla还有一些我真的不明白,它是 Value Types
。
这是我的理解:
1) 不能作为引用比较的对象吗?
final ValueType a = new ValueType();
final ValueType b = a;
System.out.println(a==b); returns false????
在 Google 自动值
code example ,它说
if(o == this){return true;}//equals method implementation what is this? I am comparing references here right?
2) 根据 Wikipedia,无需继承的高效小型“对象”。 Small Objects?
和Without继承
是什么意思?
这不能使用 VT 实现吗?
public final class ValueType extends Any //is this not possible??
3) 为什么使用它们?将使用哪种方案以及如何使用。
4) 根据 Google AutoValue Library
,简而言之,值类型对象是没有标识的对象,即如果两个值对象各自的内部状态为相等。 我的问题是:他们有状态吗?他们应该实现 equals
和 hashcode
。 没有身份的对象是什么意思?
5) 这个断言正确吗?
public static void main(final String[] args)
{
final Test clazz = new Test();
final AutoValue value = new AutoValue("Java Belongs to SUN");//Constructor Name
clazz.mutate(value);
System.out.println(value.getName()); //would print: Java Belongs to SUN??
}
private void mutate(final AutoValue value){value.setName("Java now is part of Oracle Corporation");return;}
如果是这样,JVM 是否会在方法调用之间不跟踪此 Objects or Values
获得内存?
Project Valhalla
是 Java 10 初始项目的一部分,将于 2018 年左右准备就绪。
最佳答案
你最后的断言是正确的。 ValueType
变量在将它们作为参数传递给函数时被完全复制,而不是通常只是获取对对象的引用的副本。这使您可以将小对象视为 int 或 boolean 之类的值类型。
关于java - 瓦尔哈拉计划的值(value)类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29591897/