java - Valhalla项目的价值类型是什么?

原文 标签 java value-type project-valhalla

我已经开始阅读有关Project Valhalla的内容,但我确实不了解某些内容,这就是Value Types

这是我的理解:

1)是无法将其作为参考的对象吗?

final ValueType a = new ValueType();
final ValueType b = a;
System.out.println(a==b); returns false????

Google AutoValue code example中,它指出
if(o == this){return true;}//equals method implementation what is this? I am comparing references here right?

2)根据维基百科,高效的小型“对象”没有继承。 Small Objects?Without inheritance是什么意思?

使用VT无法做到这一点吗?
public final class ValueType extends Any //is this not possible??

3)为什么要使用它们?将使用哪种方案以及如何使用。

4)根据Google AutoValue Library,简而言之,值类型对象是没有身份的对象,即,如果两个值对象各自的内部状态相等,则认为它们相等。我的问题是:它们是否具有状态,是否应实现equalshashcode。没有身份的对象是什么意思?

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 - 如何使用默认值初始化值类型?

java - 我无法在基本的Contact Manager应用程序中弄清楚的JSP Struts2错误

java - Mono#then和Mono#and之间的区别?

java - 在Java中使用不同类型的Setter

c# - 值类型是否按定义不可变?

java - 与List <int>相比,Java 9或更高版本中预计的通用专业化:.remove()将如何工作?

java - 是否可以将null分配或与值类型变量进行比较?

java - 如何在关闭窗口或重新运行应用程序时删除servlet中的cookie

java - iText-裁剪出pdf文件的一部分

c++ - 如果不使用new运算符进行初始化,C ++是否将类对象视为值类型?