黑马程序员_Java没有运算符重载

时间:2023-02-18 20:38:50

在程序中有时候需要使用重载运算符来做一些对象之间的运算,比如复数的计算,还有字符串的运算

例如:把字符串abc和字符串def拼接成abcdef  使用Java中的String类拼接字符串代码为: 

String str1 = "abc";

String str2 = "def";

String str3 = str1 + str2;

而使用Java中另外一个类StringBuilder完成的代码为

StringBuilder builder = new StringBuilder();
builder.append("abc");
builder.append("def");

可以比较一下前者更符合面向对象的思想,直接进行相加进行字符串的拼接。

但是怎么样在自己的程序中重载运算符呢,我所知道的支持运算符重载的语言有C#,还有c++,这两门语言都可以很简单的进行运算符的重载,来做对象之间的运算。我在学习java基础时不记得有这个东东,在网上查了查资料,发现Java确实没有这个特性。

String对象可以直接相加,看着似乎就是运算符的重载,其实不是.下面一段话是摘自J2se_1.6_api

Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 
StringBuffer)类及其 append 方法实现的。字符串转换是通过 
toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承

对例1的代码进行反编译可以看到,每次字符串拼接其实都是new出一个StringBuilder对象,然后用append方法拼接。通过反编译的结果,还可以证明String类的不可变性,每次进行拼接,就new出一个StringBuilder对象拼接完成后返回字符串,所以以后在程序中,单线程情况下尽量使用StringBuilder,但在多线程下不安全,应使用StringBuffer,呵呵,意外收获啊。

String str1 = "abc";

String str2 = "def";

String str3 = (new  StringBuilder(String.valueOf(str1))).append(str2).toString();

在程序中能直接使用str1+str2,算是jvm对String类开个外挂吧,呵呵,java在设计初期就朝简单易用的方向发展,撇弃了c/c++中的许多特性,例如枚举,一直到Java5才加上这个功能,或许以后Java会加上运算符重载这个特性吧。。。。。