如果我们需要new运算符来为对象分配内存,那么为什么我们不使用它
在数据类型之前分配内存?
在数据类型之前分配内存?
class-name class-var = new class-name(); new int a;
解决方法
>因为
James Gosling这么说….(或
Bjarne Stroustrup说的那样).实际上,这主要是语言设计的问题,而不是技术法则.
> javac隐藏了这些语义,并执行所谓的装箱/拆箱(并自动完成).这些类型可以作为值或“对象”(通常使用堆实现)存在.当上下文需要对象引用时,javac会发出一个Box指令,将int值移动到对象包装器(int – > Integer)并传递引用值.许多低级JVM操作码是为处理标量值而构建的,因为它们是为处理引用值(或仅引用)而构建的.
> javac隐藏了这些语义,并执行所谓的装箱/拆箱(并自动完成).这些类型可以作为值或“对象”(通常使用堆实现)存在.当上下文需要对象引用时,javac会发出一个Box指令,将int值移动到对象包装器(int – > Integer)并传递引用值.许多低级JVM操作码是为处理标量值而构建的,因为它们是为处理引用值(或仅引用)而构建的.
一个主要的例子是将int存储到集合中.它被装箱了.
但最后,问问为什么语言在语法上的作用就像问艺术家为什么要画一幅画.只是因为.语言是通过心血来潮和情绪来设计的,但在Java的情况下,new的语法是从C继承的,所以突发奇想可能是Bjarne Stroustrup’s.还要考虑Scala也是一种JVM语言,但它对于一些常见的想法却有着截然不同的语法.
关键在于编译器编写者明天可以决定“新Java”将成为一种新语言,在所有类型之前的所有大写字母中都需要NEW.无论如何,它都可以在不影响语言语义的情况下实现.
当然,选择背后有完善的设计和一致性,但选择仍然只是选择.在这种情况下,选择清楚地表明int是基本类型,而new只返回对象,而不是基元.所以这是一个很好的语法选择.