首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么C#和Java要为“新”操作符而烦恼呢?

为什么C#和Java要为“新”操作符而烦恼呢?
EN

Stack Overflow用户
提问于 2009-01-11 20:18:18
回答 4查看 4.3K关注 0票数 18

为什么new operator会存在于C#和Java等现代语言中?它是纯粹的自我文档化代码特性,还是服务于任何实际目的?

例如下面的示例:

代码语言:javascript
复制
Class1 obj = new Class1();

Class1 foo()
{
    return new Class1();
}

和Pythonesque式的编写方式一样容易阅读:

代码语言:javascript
复制
Class1 obj = Class1();

Class1 foo()
{
    return Class1();
}

编辑:Cowan一针见血地澄清了这个问题:为什么他们选择这种语法?

EN

回答 4

Stack Overflow用户

发布于 2009-01-11 20:24:34

代码语言:javascript
复制
Class1 obj = Class1();

在C#和Java语言中,您需要"new“关键字,因为如果没有它,它会将"Class1()”视为对名称为"Class1“的方法的调用。

票数 9
EN

Stack Overflow用户

发布于 2009-01-11 20:41:39

C#中的新操作符直接映射到名为newobj的IL指令,该指令实际为新对象的变量分配空间,然后执行构造函数(在IL中称为.ctor )。在执行构造函数时--与C++非常相似--对初始化对象的引用将作为不可见的第一个参数传入(如thiscall

类似于thiscall的约定允许运行库为特定类加载和JIT内存中的所有代码一次,并将其重用于类的每个实例。

Java在它的中间语言中可能有一个类似的操作码,尽管我不太熟悉它。

票数 5
EN

Stack Overflow用户

发布于 2009-01-13 22:22:05

Java之所以选择它,是因为C++开发人员对它的语法很熟悉。C#之所以选择它,是因为它对Java开发人员来说很熟悉。

在C++中使用new运算符的原因可能是,对于手动内存管理,明确何时分配内存非常重要。虽然pythonesque语法可以工作,但它使得内存分配不那么明显。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/433591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档