A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© xjandrew 中级黑马   /  2012-12-2 17:49  /  4272 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xjandrew 于 2012-12-6 12:39 编辑

既然+和=+JAVA中运算符重载的代替实现,那么怎么理解运算符重载呢?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

30 个回复

正序浏览
但汉涛 发表于 2012-12-6 00:49
运算符重载,能理解的你都理解了。
很简单,比如:
1+1=2。数字相加没有问题。

这个解释使人满意
回复 使用道具 举报
丁桂松 发表于 2012-12-6 00:18
每个语言有每个语言的特性,运算符重载不是java支持的特性,也没有规定必须有替代实现。就像java至今不支持 ...

这几句话我太熟悉了,有你自己的部分吗?
回复 使用道具 举报
运算符重载,能理解的你都理解了。
很简单,比如:
1+1=2。数字相加没有问题。
a+b=ab。换成了字母呢?在JAVA里没有问题,它扩展了+的功能。而在C++里是不行的,想要能这么计算,必须对+进行重载,实现字符串或字符串相加的功能。
a+b=c。换成对象呢?其中a,b,c都是同一个类的对象。是否能 进行计算呢?不行的话,写函数对+进行重载。
回复 使用道具 举报
运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。具体例子可以去百度啊, 这个是c++的网上很多这方面的例子的
回复 使用道具 举报
每个语言有每个语言的特性,运算符重载不是java支持的特性,也没有规定必须有替代实现。就像java至今不支持闭包一样,运算符重载也没有代替实现。对面向对象的语言来说,运算符本身就不够“面向对象”,一切都可以用方法来实现
回复 使用道具 举报
cjx2080@163.com 发表于 2012-12-5 15:12
short s=s+1;  这个语句将出错,因为s为short型,但是s+1后,1默认为int型,s将自动向上转型变成int型,所 ...

我知道这一点,那么运算符重载是什么?
21楼解释了一部分,还有人懂吗?
回复 使用道具 举报
short s=s+1;  这个语句将出错,因为s为short型,但是s+1后,1默认为int型,s将自动向上转型变成int型,所以s+1的结果是int型,将int型变量赋给short型变量,所以出错
short s+=1; 这个语句是正确的,这个语句可以看做是 short s=(short)(s+1),系统在底层自动执行了强制转换,将int型强转为short型,所以运行通过。
回复 使用道具 举报
本帖最后由 xjandrew 于 2012-12-5 14:35 编辑
梁胜海 发表于 2012-12-4 12:26
一句话,a+=b是a=a+b的简写。
没有重载之说,只有简写之说。重载是发生在方法之间的,麻烦楼主搞清名词,不 ...


大哥,你所说的我都明白,除了21楼说的内容,其它的我都知道,能说点我不知道的吗?
回复 使用道具 举报
程宏志 发表于 2012-12-3 23:18
java内部自己重载了String类的加法运算符!即什么东西与String相加都会转换成String,然后与连接。

...

这样解释比较有门,原来是虚拟机在String类和其它包装类内部做的运算符重载,开始有点印象了。
有谁还有没有更多的解释么?
回复 使用道具 举报
一句话,a+=b是a=a+b的简写。
没有重载之说,只有简写之说。重载是发生在方法之间的,麻烦楼主搞清名词,不要乱问。
java很多语法都有简写形式,自己以后就知道了。
回复 使用道具 举报
xjandrew 发表于 2012-12-3 12:20
实例体现
short s = s + 1;
无法实现

java内部自己重载了String类的加法运算符!即什么东西与String相加都会转换成String,然后与连接。

回复 使用道具 举报
本帖最后由 xjandrew 于 2012-12-3 18:26 编辑
何伟 发表于 2012-12-3 17:55
针对楼主这个问题,我很好奇而且不是很懂只有问度娘,下面是度娘的答案。


的确,JAVA中并没有运算符重载,具体运行上实际重载的是StringBuilder中append()方法
而+和+=或=+只能是运算符重载的代替,那么追本溯源,运算符重载又是什么?
回复 使用道具 举报
何伟 来自手机 中级黑马 2012-12-3 17:55:13
19#
针对楼主这个问题,我很好奇而且不是很懂只有问度娘,下面是度娘的答案。


JAVA有运算符重载吗?
如果没有,可是为什么String   s=s1+s2;却可以?
这不是运算符重载,而是方法重载,JAVA中是可以方法重载的.
此句真正实现是用JAVA   中的APPEND方法,重载的也是APPEND方法,并不是运算符.
请把下面的程序编译后再反编译:  
                  String   a   =   "a";  
                  String   b   =   "b";  
                  String   c   =   a   +   b;  
   
  得到的结果是:  
                  String   a   =   "a";  
                  String   b   =   "b";  
                  String   c   =   (new   StringBuilder(String.valueOf(a))).append(b).toString(); 
请把下面的程序编译后再反编译:  
                  String   a   =   "a";  
                  String   b   =   "b";  
                  String   c   =   a   +   b;  
                  String   d   =   c   +   1;  
   
  得到的结果是:  
                  String   a   =   "a";  
                  String   b   =   "b";  
                  String   c   =   (new   StringBuilder(String.valueOf(a))).append(b).toString();  
                  String   d   =   (new   StringBuilder(String.valueOf(c))).append(1).toString();  
   
  所以,重载的是   append()   方法。



最后还啰嗦几句,楼主应该把问题说完全点,其实沙发回答的是正确的。
回复 使用道具 举报
本帖最后由 xjandrew 于 2012-12-3 17:46 编辑
黑马_张伟 发表于 2012-12-3 17:15
我感觉你问的就很难理解,满篇除了贬低别人之外,就没有对题目认真解释过。或许你才应该“整点重点”。别人 ...


的确如此,你说的没错,同时这个感受你也体会下
你提的问题得到的答案总是答非所问,连着3回你还能保持淡定之?
咱都是老大不小的人了,对于问题的理解把握的好点可以吧。

最后我再把问题划线标示出来吧

既然+和=+JAVA中运算符重载的代替实现(JAVA不支持运算符重载,那么怎么理解运算符重载呢?
运算符重载是什么?
回复 使用道具 举报
我感觉你问的就很难理解,满篇除了贬低别人之外,就没有对题目认真解释过。或许你才应该“整点重点”。别人试图回答你是别人的权利而不是义务,你可以不接受,但不要贬低任何人。
回复 使用道具 举报
本帖最后由 xjandrew 于 2012-12-3 17:03 编辑
黑马_张伟 发表于 2012-12-3 15:49
我很纳闷,short s += 1;是怎么实现的,s刚定义,连初始化都没有,你+=1编译器不报错吗? ...


敲误
顺便你也整点重点
回复 使用道具 举报
xjandrew 发表于 2012-12-3 12:20
实例体现
short s = s + 1;
无法实现

我很纳闷,short s += 1;是怎么实现的,s刚定义,连初始化都没有,你+=1编译器不报错吗?
回复 使用道具 举报
xjandrew 发表于 2012-12-3 13:49
敢问你回答的是什么问题?

运算符重载怎么理解?

目前确实不知道Java有运算符重载这一说,可能我还没学到吧,丢人了-_-#
回复 使用道具 举报
xjandrew 发表于 2012-12-3 13:49
敢问你回答的是什么问题?

运算符重载怎么理解?

目前确实不知道Java有运算符重载这一说,可能我还没学到吧,丢人了-_-#
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马