黑马程序员技术交流社区

标题: Java运算符重载问题 [打印本页]

作者: 佟亚鹏    时间: 2012-9-6 09:37
标题: Java运算符重载问题
本帖最后由 佟亚鹏 于 2012-9-6 10:32 编辑

我查了许多资料都说Java没有运算符重载这个特性,但是String类可以直接相加拼接字符串,这是怎么回事,sun为String类开挂了吗?
作者: 孙沛    时间: 2012-9-6 09:57
java确实没有运算符重载的特性
String a = "aa";
String b = "bb";
String c = a + b;
其实是 String   c   =   (new   StringBuilder(String.valueOf(a))).append(b).toString();
这个意思
作者: 佟亚鹏    时间: 2012-9-6 10:31
孙沛 发表于 2012-9-6 09:57
java确实没有运算符重载的特性
String a = "aa";
String b = "bb";

明白了 谢谢呵  我又查了下api中的String类发现了一段话
Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的
作者: 邱成    时间: 2012-9-6 10:48
  你只看到了现象,没有看到本质.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()   方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2