Javaのswitch文にはいくつのケースが考えられますか?たとえば、整数をチェックしている場合、いくつのケースブロックが可能ですか?Javaのswitch文
答えて
要件によって異なります。あなたはrange int型の多くのケースを持つことができます。 int型の範囲が有限で、そのあと整数サイクルの概念が現れます。
intのサイズが-2,147,483,648から2,147,483,647までの範囲であるため、それぞれの数に応じて大文字と小文字を区別することができます。したがって、整数の場合は限られた数のケースがあります。
しかし、文字列を大文字で使用する場合は、ボヘミアン語のように大文字と小文字を無制限にすることができます。
は制限が
JVM仕様!= java仕様です。 jvmがJava仕様にない制限を課す場合は、javacまたはjvm – aioobe
Yep Bohemianのいずれかでバグレポートを提出できます。私もそう思った。しかし、それが書かれた場所を見つけることができませんでした。 – namalfernandolk
は、ケースの合計数はintはハードウェアに応じて取ることができる最大数になり、すべてのバイトコードに対応するために、あなたのJVMのサイズを除いて、ありません。ご覧くださいdatatypes in java
このように、可能な範囲内のケースブロックの数をすべて指定します。
Infinite!!
このような制限はありません。
完全に真実ではありません。上限があります。 – Blender
上限はあなたが欲しいケースの数ですか? – namalfernandolk
いいえ、上限はメソッドあたりの最大文字数65535で定義されます。それよりも長いメソッドは「コードが大きすぎてコンパイルできません」または「コードが大きすぎます」という文がコンパイルされませんでした。 – Nicktar
スイッチの大文字小文字の制限はありません。最悪の場合、ヒープスペースは得られますが、簡単な方法ではありません。
間違っています。 Javaメソッドには、最大65535文字を含めることができます。 – Nicktar
@Nicktar::Dあなたの研究や何かを共有してもらえますか?それは信じがたいです!個人的には私は1800行の方法とダムを見てきましたが、それ以上の文字が65535であることを確認しました。 http://stackoverflow.com/questions/6570343/maximum-size-of-a-method-in-java – manurajhada
@manurajhada http: //bugs.sun.com/view_bug.do?bug_id=4262078 65535は生成されたバイトコードの最大サイズです(ソースコードではありません)。スイッチのケースごとに少なくとも1バイトの生成されたバイトコードが存在しなければならない。従って限界は65535未満の場合でなければならない。 – emory
あなたが最もよく遭遇する境界は、クラスあたりの定数プールの最大エントリ数65535です。これにより、複雑さの少ない数千のケースブロックが可能になります。定数プールには、クラス内で少なくとも1回は使用される数値リテラルまたは文字リテラルごとに1つのエントリが含まれますが、フィールド、メソッド、および/またはクラス参照の1つ以上のエントリも含まれている必要がある定数プールにも存在します。私。メソッド参照エントリは、メソッドのシグネチャの文字列エントリへの参照と、宣言クラスのクラスエントリへの参照で構成されます。クラスエントリ自体は、クラス名の文字列エントリを再び参照します。
参照:各ケースであるジャンプターゲットを有するのでJava Virtual Machine Specification
無視またはケースブロックでコードを再利用するスイッチの絶対上限でLimitations of the Java virtual machineとThe Constant Poolはわずかに低い30^2以上の場合であります32ビット整数(符号tableswitchとlookupswitchの命令を参照)を使用しているため、ケースごとに4バイトが必要で、各メソッドのバイトコードサイズは2^32バイトよりわずかに小さくなります。これは、バイトコードがcode attributeにラップされ、length of a attributeが符号なし32ビット整数として指定されているためです。 code属性にはいくつかのヘッダ情報があり、メソッドにはいくつかのエントリと終了コードが必要で、tableswitch文には最小値/最大値と最大3バイトのパディングを持つバイトが必要です。
興味深い答え(リンクありがとう)。しかし、それはスイッチに適用されますか?定数プールは、「クラス、インタフェース、クラスインスタンス、または配列のレイアウト」に使用されます。 switchステートメントはジャンプテーブル(配列!)にコンパイルされる可能性があり、理論上の制限はスイッチ当たり2Gケースであり、定数プールは配列の数、すなわちswitchステートメントのみを制限します。もちろん、実際にはずっと早くメモリ不足になります。 –
はい、大文字小文字の定数はバイトコードに直接配置され、定数プールには配置されませんが、各大文字小文字ブロックのコードにはいくつかの定数プールエントリが必要になる可能性があります。もちろん、一定のプールエントリの使用を最小限に抑えることができます。'5'を' 4 + 1'としてコンパイルするか、同じ引数で同じメソッドを呼び出すことで、定数プールの限られたサイズを回避することができるようになります。 – x4u
しかし、その制限はJavaクラスにも当てはまります。 –
質問、回答、コメントを読んで、私はそれがなぜ関係するのか分かりません。あなたは手動で書くことよりも確かにcase
を持つことができます。また、コードを機械で生成することができない場合は、Javaのswitch
esよりも良い選択肢があります。
最後に、現実的な答え! – Taslim
。少なくともような単純なコードのために:
public class SwitchLimit {
public static void main(String[] args) {
int x = 0;
switch(x) {
case 0:
...
case 16376:
default:
}
System.out.println("done.");
}
}
あなたは(default
を数えていない)、この例では16377個のcase文を持つことができますし、case 16377:
を追加する場合、コードは次のエラーでコンパイルされません。
The code of method main(String[]) is exceeding the 65535 bytes limit
他の人が指摘しているように、この数値は、メソッドが実際に意味をなすものを実際に実行する場合、おそらく大幅に低くなります。
- 1. Java switch文
- 2. Java - nextLine(); switch文の中で
- 3. Java switch文<identifier> issue
- 4. + =/- =演算子を持つJava switch文
- 5. Java enum:リファクタリングswitch文 'constant expression required'コンパイルエラー?
- 6. switch文
- 7. PHPのswitch文
- 8. switch文のブレークメニュー
- 9. switch文のヘルプ
- 10. java switch case question
- 11. switch文のif文をwithからswitch文に変更する
- 12. switch文とisset
- 13. PHP switch()文
- 14. c switch文
- 15. switch文C++
- 16. Objective-Cのswitch文
- 17. switch文のJacocoカバレッジ
- 18. Java構文:変数をswitch caseにする? Javaで
- 19. Java switchステートメント内のメソッドスコープ
- 20. EXC BADアクセスswitch文
- 21. Javaのswitch文は反対の場合を選択します
- 22. のJava switch文が列挙型の場合に
- 23. 私のswitch文のエラーメッセージ?
- 24. Javaでswitch文を避けるのはなぜですか?
- 25. 2つの変数を処理するJava switch文?
- 26. regexをJavaのswitch文に使用する
- 27. R switch文の比較
- 28. Java switch/case method recomended length
- 29. java switch/case文でクラス名を使用できますか?
- 30. ng-switch on空文字列
Java 7では、文字列による切り替えも可能です[ここをクリック](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html)。これにより、無制限の数のスイッチが可能になります。 – Santosh
+1偉大な質問、うまくいけないダブ。 – dacwe
確かに上限がありますが、20を超えない場合、なぜこの質問がありますか?あなたがPrimeを使うためのプログラムを書いていると教えてください。 –