2

これがばかげた質問である場合は申し訳ありません。私はJavaの初心者です(PHPのバックグラウンドから来ました)。だからここに私が持っているものがあります。

    String variable = new String("whatever");
    //instanceof String == true here
    variable = null;
    //whereas here instanceof String == false
    variable = new Integer(3);// error

オブジェクト型でインスタンス化したので、変数を null に設定しても参照が削除されませんか? 変数名をそのままにして、データ型を変更する方法はありますか? ありがとうございました

4

5 に答える 5

9

Java は厳密に型指定された言語です。

variableとして指定するStringと、常に文字列になります。無効な型を割り当てようとすると、型を混在させようとしたため、コンパイラはエラーを返します。

Java で何かを null に設定しても、型は変更されません。もちろん、変数がスコープ外に出るのを許可して、別のタイプの別の変数を作成することもできます。次に例を示します。

if ( x == 1 ) {
  String variable = "whatever";
  ...
}
else {
  Integer variable = new Integer( 3 );
  ...
}

(変数名を再利用すると、もちろん混乱する可能性があります)。

もう 1 つ気付くのは、スーパークラスとして指定された型にサブクラスを割り当てることができるということです。たとえば、 classIntegerは class のサブクラスであるNumberため、次のようにすることができます。

Number variable = new Integer( 3 );
于 2013-09-23T13:43:43.270 に答える
2

java は厳密に型指定された言語です。それを文字列として定義したら、それはのStringまたはサブクラスになる必要がありますStringStringとしてマークされていない場合final)。

これも確認してください: https://stackoverflow.com/questions/11954068/java-strongly-typed-or-weak-typed

于 2013-09-23T13:45:02.107 に答える
1

Java は厳密に型付けされた言語であり、それと戦わないことをお勧めします。

Javaで行う通常のことは、次のように書くことです

Integer myConvertedInt = Integer.parseInt(variable)

また、Java にはシンタックス ショートカットがあり、(文字列に対して) 次のように記述できます。

String variable = "whatever";

タイプ (すべての Java 非 POD タイプの基本クラス) を使用して、やりたいことを実現できます。Objectしかし、それにはキャスティングが含まれ、実際には言語の誤用になります。

于 2013-09-23T13:47:04.950 に答える
1

変数の型とオブジェクトのクラスです。

instanceof は、変数または式によって参照されるオブジェクトのクラスをテストし、参照が null であるためオブジェクトがない場合は true を返すように定義されています。

参照が null でない場合は、その型に適したクラスのオブジェクトを指す必要があります。

柔軟性を得る方法は、変数の型に共通のインターフェイスを使用することです。変数を java.util.List 型として宣言すると、ArrayList や LinkedList などを指すことができます。

変数型オブジェクトを作成することもできます。その場合、任意のオブジェクトを参照できますが、Java の多くの利点が失われます。実際には、静的型のない言語により適したスタイルで書いていることになります。

于 2013-09-23T13:47:22.837 に答える
1

Java は強力に静的に型付けされています。したがって、参照 (変数) は、独自の型またはサブクラスのオブジェクトのみを指すことができます。したがって、Object変数はスーパークラスであるため、Java の他のクラスを参照できます。の子クラスではないため、String参照には使用できません。IntegerString

あなたがJavaでaに持っている最も近いものvarObject.

于 2013-09-23T13:46:31.837 に答える