したがって、私の質問はかなり単純です。
- 文字列連結に加算演算子を最初に使用したのは誰ですか?
- それが Java だった場合、なぜそうすることにしたのでしょうか。
- Sun は、Java での演算子のオーバーロードを明示的に禁止しているようです。これにより、演算子の再定義が可能になり、その演算子に関する想定が破られます。
- それでも、文字列連結加算演算子を実装することを決定しましたが、これは加算演算子の可換プロパティに違反していますか?
したがって、私の質問はかなり単純です。
Java によると、コードを書くプログラマーは演算子をオーバーロードできませんが+
、プリミティブ (int や double など) と String オブジェクトで加算を実行する Java 言語演算子がオーバーロードされる限り。
C++ のような演算子のオーバーロードをサポートする言語では、
+
演算子を変更して減算を実行できますが、その結果、コードが貧弱になります。これは、Java 設計者がプログラマーに演算子のオーバーロードを許可しない場合です。
JavaString
オブジェクトは、プログラムで頻繁に使用されるため、Java では特別な扱いを受けます。プリミティブはコール スタックに格納されるため、必要なストレージ スペースが少なく、操作が安価です。一方、オブジェクトはプログラム ヒープに格納されるため、複雑なメモリ管理とより多くのストレージ スペースが必要になります。
パフォーマンス上の理由から、Java の String はプリミティブとクラスの間にあるように設計されています。
文字列リテラルは共通プールに格納されます。これにより、ストレージを節約するために同じ内容の文字列のストレージを共有することが容易になります。これは、Java 設計者が
+
パフォーマンスを向上させ、プログラマーに利便性を与えるために文字列連結をオーバーロードすることを考えているケースでもあります。