Day10-31.String operator + and +=

字符串操作符++=

這個操作符在Java中有一項特殊用途:連接不同的字符串。

這一點已經在前面的例子中展示過了。

儘管與+和+=的傳統使用方式不太一樣,但是我們還是很自然地使用這些操作符來做這件事情。

這項功能用在C++中似乎是個不錯的注意,所以引入了操作符重載(operator overloading)機制,

以便C++程序員可以爲幾乎所有操作符增加功能

但非常遺憾,與C++的另外一些限制結合在一起,使得操作符重載成爲了一種非常複雜的特性,

程序員在設計自己的類時必須對比有非常周全的考慮。

與C++相比,儘管操作符重載在Java中更易實現(就像在C#語言中所展示的那樣,它具有相當簡單直接的操作符重載機制),但仍然過於複雜。

所以Java程序員不能像C++和C#程序員哪呀那個實現自己的重載操作符。

//: operators/StringOperators.java

import static net.mindview.util.Print.*;


public class StringOperators {

  public static void main(String[] args) {

    int x = 0, y = 1, z = 2;

    String s = "x, y, z ";

    print(s + x + y + z);

    print(x + " " + s); // Converts x to a String

    s += "(summed) = "; // Concatenation operator

    print(s + (x + y + z));

    print("" + x); // Shorthand for Integer.toString()

  }

} /* Output:

x, y, z 012

0 x, y, z

x, y, z (summed) = 3

0

*///:~

請注意,第一個打印語句的輸出是012而不是3,而3正是將這些整數求和之後應該得到的結果,

之所以出現這種情況,是因爲Java編譯器會將x、y和z轉換成它們的字符串形式,

然後連接這些字符串,而不是先把它們加到一起。

第二個打印語句把先導的變量轉換爲String,因此這個字符串轉換將不依賴於第一個變量的類型。

最後可以看到使用+=操作符將一個字符串追加到了s上,並且使用了括號來控制表達式的賦值順序,

以使得int類型的變量在顯示之前確實進行了求和操作。

請注意main()中的最後一個示例:有時會看到這種一個空的String後面跟隨+和一個基本類型變量,

以此作爲不調用更加麻煩的顯式方法(在本例中應該是Interger.toString())而執行字符串轉換的方式。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章