10

したがって、以下のステートメントのようにキャストする場合:-

int randomNumber=(int) (Math.random()*5)

それはランダムな番号を引き起こします。int に変換されるように生成されます。

また、同じことを行う Integer.parseInt() に出くわしたこのメソッドもあります!

つまり、整数を返します

値を int にする 2 つの異なる方法はなぜですか?

また、検索を行ったところ、 parseInt() は文字列を引数として受け取ると言われています..これは、 parseInt() が文字列を整数に変換するためだけであることを意味しますか?

このキャスティングはどうですか (int) ?? これを使用して文字列を int に変換することもできますか?

ばかげた質問のように聞こえる場合は申し訳ありません..私は混乱していて、理解しようとしています.

ヘルプ ?

4

7 に答える 7

24

Integer.parseInt は、キャストと同じことを行いません。

最初の例を見てみましょう。

int randomNumber=(int) (Math.random()*5)

Math.random は double を返します。double に int を掛けると、Java は結果を double と見なします。したがって、式 Math.random()*5 の型は double です。あなたがやろうとしているのは、その値を int 型の変数に代入することです。デフォルトでは、Java は int 型の変数に double 値を代入することを、明示的にコンパイラーに許可しない限り許可しません。基本的に、double を int にキャストすることは、「この int 変数がこの double 値の小数部分を保持できないことはわかっていますが、それは問題ありません。切り捨ててください」とコンパイラーに伝えることと考えることができます。

String から int への変換を見てみましょう。

int value = Integer.parseInt("5");

文字列「5」はすぐに整数に変換できません。定義により小数部分を削除することで整数に変換できる double とは異なり、文字列は簡単に、または一貫して int に変換できません。「5」、「042」、「1,000」はすべて整数表現ですが、「Hello, World!」のようなものです。ではない。このため、String を int に変換するための一次言語機能はありません。代わりに、メソッドを使用して文字列を解析し、値を返します。

したがって、すべての質問に答えるには:

値を int にする 2 つの異なる方法はなぜですか?

変換する値の型を考慮する必要があります。プリミティブを int に変換する場合はキャストを使用できます。オブジェクトを変換する場合は、その型に固有の何らかの変換メソッドを使用する必要があります。

また、検索を行ったところ、 parseInt() は文字列を引数として受け取ると言われています..これは、 parseInt() が文字列を整数に変換するためだけであることを意味しますか?

正しい。parseInt メソッドに他の型を渡すことはできません。そうしないと、コンパイラ エラーが発生します。

このキャスティングはどうですか (int) ?? これを使用して文字列を int に変換することもできますか?

いいえ、int へのキャストはプリミティブ値に対してのみ機能し、Java では String はプリミティブではありません。

于 2010-05-20T16:29:27.433 に答える
4

あなたの例では、浮動小数点数を int にキャストしています。ただし、Integer.parseInt() は String から整数値を読み取ります。

于 2010-05-20T15:59:25.900 に答える
3

互換性のあるタイプ間でのみキャストできます(JLSにリンクしますが、初心者の質問には多すぎるかもしれません)。

キャストとは基本的に、値を取得して、「これは double だったのですか?今は int です。それで」と言うだけです。

文字列は int のようなものではないため、これを行うことはできません。代わりにint を解析する必要がありますが、これは実際には思ったよりもはるかに困難です。幸いなことに、すでに実装されているため、どのように機能するかを心配する必要はありません。

于 2010-05-20T16:02:51.010 に答える
1

キャストは、ある数値型から別の数値型にのみ変換できます。文字列の解釈 (つまり解析) は、メソッド呼び出しで行う必要があります。

于 2010-05-20T15:59:35.120 に答える
1

上から始めましょう。

int randomNumber=(int) (Math.random()*5);

はい、これは確かに 0 から 4 の間のランダムな整数を与えますが、これはこれを行う適切な方法ではありません。ほら、括弧を忘れた場合、つまり次のように入力します

int notSoRandomNumber=(int) Math.random()*5;

キャストは乗算よりも優先されるため、常に 0 になります。つまり、 Math.random() の結果は、最初に整数に強制され、常に 0 になり、次に 5 を掛けますが、これは 0 のままです。

ランダムな整数を生成するために java.util.Random を使用することをお勧めします。qv http://java.sun.com/javase/6/docs/api/java/util/Random.html#nextInt(int) .

キャストは「互換性のある型」の間でのみ行うことができます。プリミティブ型とそのラッパー (つまり、int、Integer、long、Long など)については、一部の変換で情報が失われることに注意して、いつでもそれらの間でキャストできます。たとえば、long を int にキャストする場合、long には Integer.MAX_VALUE より大きい数値が含まれる場合があります]。この種の Java のキャストは、基本的に C++ から取得し、C から取得しました。

オブジェクトのキャストに関しては、実際にはもっと簡単です。「この物体は X ですか?」と尋ねるだけです。その場合、(X) o は意味があり、静的型 X を持ちます。o が X ではなく、とにかくキャストしようとすると、o の動的 (実行時) 型が X と互換性がないことを示す ClassCastException が発生します。おそらく後で、オブジェクトの静的タイプと動的 (実行時) タイプの違いを理解したときに、より意味のあるものになるでしょう。

于 2010-05-20T16:31:39.537 に答える