栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java为什么不提供运算符重载?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java为什么不提供运算符重载?

假设你想覆盖所引用的对象的先前值a,则必须调用成员函数。

Complex a, b, c;// ...a = b.add(c);

在C ++中,此表达式告诉编译器在堆栈上创建三(3)个对象,执行加法,然后将结果值从临时对象复制到现有对象中

a

但是,在Java中,

operator=
不对引用类型执行值复制,并且用户只能创建新的引用类型,而不能创建值类型。因此,对于名为的用户定义类型
Complex
,赋值意味着将引用复制到现有值。

请考虑:

b.set(1, 0); // initialize to real number '1'a = b; b.set(2, 0);assert( !a.equals(b) ); // this assertion will fail

在C ++中,这会复制值,因此比较结果将不相等。在Java中,

operator=
执行引用复制,因此a和b现在都引用相同的值。结果,由于对象将比较等于自身,因此比较将产生“等于”。

复制和引用之间的差异只会增加操作符重载的混乱。正如

@Sebastian
提到的那样,Java和C#都必须分别处理值和引用相等性-
operator+
可能会处理值和对象,但是
operator=
已经实现了处理引用的问题。

在C ++中,你一次只能处理一种比较,因此可以减少混乱。例如,在

Complex
operator=
并且
operator==
都致力于价值-复制值分别比较值。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/366329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号