1

次の例でJavaが文字列と整数を連結する理由を誰か説明できますか?

public class main {

    public static void main(String[] args) {
        System.out.println("test" + 5);
        System.out.println(5 + "5");
    }

}

また、Python の+演算子の実装との違いは何ですか。

Python では、これによりTypeError:

"5" + 5
4

7 に答える 7

6

+2 つの異なる言語で同じように動作する必要があると考える理由は何ですか? Javaでは、次のようなものがある場合

System.out.println(5 + "5");
55

ご覧のとおり、文字列連結が実行されます。これは、Java 言語の仕様で概説されています ( JLS §15.18.1を参照)。対照的に、Python は Java のように型を強制しません (したがってTypeError)。文字列の連結が発生するためには、両方のオペランド+が文字列でなければなりません。

>>> "5" + str(5)
'55'

これは Python の仕様で概説されています ( Python 言語リファレンス §5.6を参照)。状態が言語間で特定の方法で動作する必要があるという普遍的なルールはありません。必要に応じて、減算+を実行する言語を作成できます。+

@Wooble が指摘しているように、Perlはさらに別の方法+で動作します。

$ perl -e 'print 5 + "5"; print "\n"'
10
于 2013-08-21T15:25:40.093 に答える
0

"5" は string 型で 5 は int 型であるため、TypeError が返されます。誰かが言ったように、それはまさにそれが設計された方法です。混乱を避けるために部分的に推測しています。"5" + 5 を 10 または 55 にしますか?

55が必要な場合は、intを文字列に変換することでこれを行うことができます

'5' + str(5)
于 2013-08-21T15:25:47.227 に答える
0

ドキュメントを確認すると

Java 言語は、文字列連結演算子 ( + ) と、他のオブジェクトの文字列への変換を特別にサポートしています。文字列の連結は、StringBuilder(または StringBuffer) クラスとその追加メソッドを通じて実装されます。

だから、それはJava固有です

于 2013-08-21T15:25:54.660 に答える