2

強いタイプと弱いタイプが何であるかをよく知っています。また、Java が強く型付けされていることも知っています。今、私は Python を学んでいますが、これは強力な型付き言語です。しかし今、Python は Java よりも「より」強く型付けされていることがわかりました。説明する例

public class StringConcat {

  public static void main(String[] args) {
      String s="hello ";
      s+=4;
    System.out.println(s);
}
}

エラーはなく、hello 4 が出力されます

パイソンで

>>> x="hello"
>>> x+=4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

したがって、この例は、python が強く型付けされていることを示しています。内部で Java が int を String に変換して String concat を実行する操作を行わない限り。

4

3 に答える 3

7

あなたの例にもかかわらず、Javaはまだ強く型付けされています。コードは次と同等です

String s = "hello ";
s = s + 4;

Java は を文字列に変換して4から、文字列の連結を実行します。これは言語機能です。

+ただし、Python では、 を使用して文字列に連結することはできません4。これは、言語がそれをstr. ご指摘のとおり、Java は内部でこれを行います。

于 2013-08-30T00:06:21.093 に答える
1

この例は、Java が強く型付けされていないことを証明するものではありません。暗黙の文字列変換(JLS、セクション 5.1.11)が舞台裏で行われているだけです。

最初に、リテラル ( )Integerからを作成するために参照型への変換が発生し、連結用の に変換するために が呼び出されます。intnew Integer(4)toString()String

于 2013-08-30T00:06:51.747 に答える
0

別の面白い例が必要な場合は、多くの場所で醜いものを見つけることができます

intNumber+""

数値を文字列に変換します。プログラマーは怠け者で、書きたくない

Integer.toString(intNumber)

これにより、実行時に文字列変換と無用な文字列連結が発生します。

これは、Java が厳密に型指定されていないという意味ではなく、単純にすべてのオブジェクトに toString() メソッドが必要であり、すべてのプリミティブを自動的に非プリミティブの対応物にボックス化およびボックス化解除できます (int -> Integer、long -> Long など.. ) toString() を実装し、Java の "+" は文字列連結として機能します。

于 2013-08-30T00:16:39.790 に答える