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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 佟亚鹏 中级黑马   /  2012-9-6 09:37  /  3745 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 佟亚鹏 于 2012-9-6 10:32 编辑

我查了许多资料都说Java没有运算符重载这个特性,但是String类可以直接相加拼接字符串,这是怎么回事,sun为String类开挂了吗?

4 个回复

倒序浏览
java确实没有运算符重载的特性
String a = "aa";
String b = "bb";
String c = a + b;
其实是 String   c   =   (new   StringBuilder(String.valueOf(a))).append(b).toString();
这个意思
回复 使用道具 举报
孙沛 发表于 2012-9-6 09:57
java确实没有运算符重载的特性
String a = "aa";
String b = "bb";

明白了 谢谢呵  我又查了下api中的String类发现了一段话
Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的
回复 使用道具 举报
  你只看到了现象,没有看到本质.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()   方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马