{"id":1165,"date":"2019-04-30T22:02:55","date_gmt":"2019-04-30T14:02:55","guid":{"rendered":"http:\/\/van-yzt.com\/?p=1165"},"modified":"2019-04-30T22:13:03","modified_gmt":"2019-04-30T14:13:03","slug":"%e6%b3%a8%e5%ae%9a%e6%98%af%e9%9a%be%e5%bf%98%e7%9a%84%e6%97%a5%e5%ad%90","status":"publish","type":"post","link":"https:\/\/huzi-baozi.com\/?p=1165","title":{"rendered":"\u6ce8\u5b9a\u662f\u96be\u5fd8\u7684\u65e5\u5b50"},"content":{"rendered":"<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a02019\u5e7404\u670830\u65e5\uff0c\u662f\u4e00\u4e2a\u65e2\u4f24\u611f\u53c8\u5f00\u5fc3\u7684\u65e5\u5b50\u3002<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u56db\u6708\u5c3e\u5df4\u7684\u676d\u5dde\uff0c\u53c8\u5f00\u59cb\u9634\u6c89\u6c89\u7684\uff0c\u539a\u91cd\u7684\u4e91\u6735\u542b\u7740\u4e30\u5bcc\u7684\u96e8\u6c34\uff0c\u60ac\u5728\u7a7a\u4e2d\u3002\u6211\u548c\u5c3d\u54e5\uff08\u5b64\u5c3d\uff09\u5728\u5bb6\u8fb9\u4e0a\u7684\u4e34\u5e73\u6c34\u666f\u516c\u56ed\u6709\u5b5a\u8336\u4e66\u5c4b\uff0c\u4ece\u65e9\u4e0a\u5341\u70b9\u804a\u5230\u4e86\u4e0b\u5348\u56db\u70b9\u534a\u3002\u4ece\u5b66\u4e60\u5230\u5de5\u4f5c\uff0c\u6e90\u7801\u5230\u751f\u6d3b\uff0c\u804a\u5f97\u662f\u9163\u7545\u6dcb\u6f13\u3002\u60f3\u8bf4\u4ec0\u4e48\uff0c\u90fd\u8bf4\u4e86\uff0c\u60f3\u8868\u8fbe\u7684\u656c\u4f69\u548c\u9057\u61be\uff0c\u4e5f\u90fd\u503e\u8bc9\u4e86\uff0c\u4e5f\u8bb8\uff0c\u5c3d\u54e5\uff0c\u80fd\u4ea6\u5e08\u4ea6\u53cb\u5427\u3002<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u5176\u5b9e\u5230\u4e86\u6210\u5e74\u4eba\uff0c\u6709\u4e9b\u82e6\u5934\u662f\u4e00\u5b9a\u8981\u53bb\u7ecf\u5386\uff0c\u4e5f\u4e00\u5b9a\u8981\u53bb\u81ea\u5df1\u5403\u8fc7\uff0c\u624d\u77e5\u9053\u7684\u3002\u6b63\u662f\u8fd9\u4e9b\u82e6\u5934\u7684\u5b58\u5728\uff0c\u8ba9\u4eba\u89c9\u5f97\u4eba\u751f\u6709\u771f\u5b9e\u5b58\u5728\u611f\uff0c\u4e5f\u6b63\u662f\u5927\u5927\u5c0f\u5c0f\u7684\u6bcf\u4e00\u4e2a\u9009\u62e9\uff0c\u6709\u4e86\u73b0\u5728\u7684\u4eba\u751f\u548c\u672a\u6765\u7684\u53ef\u80fd\u3002\u6709\u4e9b\u4e8b\uff0c\u6211\u61c2\uff0c\u6709\u4e9b\u4e8b\uff0c\u6211\u9700\u8981\u53bb\u61c2\uff0c\u5185\u5fc3\u6000\u7740\u611f\u6fc0\u4e4b\u60c5\uff0c\u5bf9\u4e8e\u8fc7\u5f80\u7684\u4eba\u548c\u4e8b\uff0c\u90fd\u6709\u4e00\u9897\u611f\u6069\u7684\u5fc3\uff0c\u6211\u60f3\u6211\u662f\u5e78\u8fd0\u548c\u5e78\u798f\u7684\u3002<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u5bf9\u4e8e\u5c3d\u54e5\uff0c\u6211\u4e00\u76f4\u4ee5\u6765\u90fd\u662f\u94a6\u4f69\u7684\uff1a\u4e00\u4e2a\u7537\u4eba\uff0c\u80fd\u53d7\u5f97\u4e86\u59d4\u5c48\uff0c\u62c5\u5f97\u8d77\u8d23\u4efb\uff0c\u6297\u5f97\u4e86\u5927\u65d7\uff0c\u8fd9\u662f\u96be\u80fd\u53ef\u8d35\u7684\u3002\u6709\u65f6\u5019\uff0c\u8fd8\u80fd\u7ec6\u817b\u5982\u4e1d\uff0c\u5173\u6000\u5907\u81f3\uff0c\u7740\u5b9e\u8ba9\u6211\u5728\u51b0\u51b7\u7684\u4f01\u4e1a\u673a\u5668\u4e2d\uff0c\u611f\u53d7\u5230\u5bb6\u7684\u6e29\u6696\uff0c\u800c\u4e0d\u662f\u6218\u573a\u7684\u5200\u5149\u5251\u5f71\u3002<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u4eca\u5929\uff0c\u6211\u4eec\u63a2\u8ba8\u4e86\u5f88\u591a\uff0c\u751f\u6d3b\u505a\u4eba\u65b9\u9762\u7684\u4e8b\uff0c\u6211\u60f3\u5c31\u5199\u5230\u8fd9\u91cc\uff0c\u63a5\u4e0b\u53bb\u7684\uff0c\u60f3\u8bb0\u5f55\u4e0b\u4eca\u5929\u4eceJava switch\u8bed\u53e5\u4e2d\u5b66\u5230\u7684\u4e1c\u897f\u3002<\/p>\n<h2>\n\u5de5\u5177<\/h2>\n<ul>\n<li>\njava<\/li>\n<li>\njavac<\/li>\n<li>\njavap<\/li>\n<li>\ndiff<\/li>\n<\/ul>\n<h2>\n\u4ee3\u7801<\/h2>\n<h3>\n\u7b2c\u4e00\u6bb5\u4ee3\u7801<\/h3>\n<pre><code class=\"language-java\">public class Test {\n    public static void main(String[] args) {\n        switch (&quot;H&quot;) {\n            case &quot;A&quot;:\n                break;\n            case &quot;xxxx&quot;:\n                break;\n        }\n    }\n}\n<\/code><\/pre>\n<h3>\nTest.class\u5b57\u8282\u7801<\/h3>\n<pre><code class=\"language-java\">Compiled from &quot;Test.java&quot;\npublic class Test {\n  public Test();\n    Code:\n       0: aload_0\n       1: invokespecial #1                  \/\/ Method java\/lang\/Object.&quot;&lt;init&gt;&quot;:()V\n       4: return\n\n  public static void main(java.lang.String[]);\n    Code:\n       0: ldc           #2                  \/\/ String H\n       2: astore_1\n       3: iconst_m1\n       4: istore_2\n       5: aload_1\n       6: invokevirtual #3                  \/\/ Method java\/lang\/String.hashCode:()I\n       9: lookupswitch  { \/\/ 2\n                    65: 36\n               3694080: 50\n               default: 61\n          }\n      36: aload_1\n      37: ldc           #4                  \/\/ String A\n      39: invokevirtual #5                  \/\/ Method java\/lang\/String.equals:(Ljava\/lang\/Object;)Z\n      42: ifeq          61\n      45: iconst_0\n      46: istore_2\n      47: goto          61\n      50: aload_1\n      51: ldc           #6                  \/\/ String xxxx\n      53: invokevirtual #5                  \/\/ Method java\/lang\/String.equals:(Ljava\/lang\/Object;)Z\n      56: ifeq          61\n      59: iconst_1\n      60: istore_2\n      61: iload_2\n      62: lookupswitch  { \/\/ 2\n                     0: 88\n                     1: 91\n               default: 91\n          }\n      88: goto          91\n      91: return\n}\n\n<\/code><\/pre>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u53ef\u4ee5\u4ece\u7b2c\u4e8c\u90e8\u5206\u7b2c\u516b\u884c\u770b\u5230\uff0c\u6e90\u7801\u4e2d\u7684<code>switch(&quot;H&quot;)<\/code>\u91c7\u7528\u4e86<code>String<\/code>\u7684<code>hashCode<\/code>\u65b9\u6cd5\u3002\u5176\u5b9e<code>switch<\/code>\u65b9\u6cd5\u53ea\u652f\u6301<code>int<\/code>\u7c7b\u578b\u7684\u5339\u914d\uff0c\u5176\u4ed6\u57fa\u672c\u6570\u636e\u7c7b\u578b\u90fd\u662f\u4f1a\u88ab\u8bed\u6cd5\u7cd6\u8f6c\u6362\u4e3a\u6574\u578b\u6765\u505a\u5224\u65ad\u548c\u5339\u914d\u3002<\/p>\n<h3>\n\u7b2c\u4e8c\u6bb5\u4ee3\u7801<\/h3>\n<pre><code class=\"language-java\">public class Test {\n    public static void main(String[] args) {\n        A a = A.A;\n        System.out.println(&quot;B ordinal is :&quot; + A.B.ordinal());\n        switch (a) {\n            \/\/ \u8bf7\u7279\u522b\u6ce8\u610f\u8fd9\u91cccase\u51fa\u73b0\u7684\u987a\u5e8f\n            case B:\n                System.out.println(&quot;This A&quot;);\n                break;\n            case C:\n                System.out.println(&quot;This B&quot;);\n                break;\n            case A:\n                System.out.println(&quot;This C&quot;);\n                break;\n            default:\n                System.out.println(&quot;Default.&quot;);\n                break;\n        }\n    }\n\n    enum A {\n        A, B, C;\n    }\n}\n\n<\/code><\/pre>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u8fd9\u91cc\u4f7f\u7528\u4e86\u4e00\u4e2a\u5185\u90e8\u679a\u4e3e\u7c7b<code>A<\/code>\uff0c\u5e76\u4f5c\u4e3a<code>switch<\/code>\u4e2d\u7684\u5224\u65ad\u7c7b\u578b\u3002\u4ece\u4e4b\u524d\u77e5\u8bc6\u6765\u8bf4\uff0c\u8fd9\u91cc\u4f1a\u5c06\u679a\u4e3e\u503c\u8f6c\u6362\u4e3a\u6574\u578b\u6765\u505a\u6761\u4ef6\u5339\u914d\u3002\u6240\u4ee5\u6211\u4eec\u7f16\u8bd1\u4e00\u4e0b\uff0c\u53d1\u73b0\u6709\u4e09\u4e2a<code>class<\/code>\u6587\u4ef6\uff1aTest.java\u3001Test$1.java\u548cTest$A.java\u3002\u6211\u4eec\u77e5\u9053\uff0cTest.class\u662f<code>Test<\/code>\u7c7b\u751f\u6210\u7684\uff0cTest$A.class\u662f\u5185\u90e8\u679a\u4e3e\u7c7b<code>A<\/code>\u751f\u6210\u7684\u3002\u4f46\u662fTest$1.class\u5462\uff1f\u6211\u4eec\u6682\u4e14\u653e\u4e00\u4e0b\uff0c\u6765\u770b\u4e0b\u53cd\u7f16\u8bd1\u7684\u7ed3\u679c\u3002<\/p>\n<h3>\nTest.class\u5b57\u8282\u7801<\/h3>\n<pre><code class=\"language-java\">Compiled from &quot;Test.java&quot;\npublic class Test {\n  public Test();\n    Code:\n       0: aload_0\n       1: invokespecial #1                  \/\/ Method java\/lang\/Object.&quot;&lt;init&gt;&quot;:()V\n       4: return\n\n  public static void main(java.lang.String[]);\n    Code:\n       0: getstatic     #2                  \/\/ Field Test$A.A:LTest$A;\n       3: astore_1\n       4: getstatic     #3                  \/\/ Field java\/lang\/System.out:Ljava\/io\/PrintStream;\n       7: new           #4                  \/\/ class java\/lang\/StringBuilder\n      10: dup\n      11: invokespecial #5                  \/\/ Method java\/lang\/StringBuilder.&quot;&lt;init&gt;&quot;:()V\n      14: ldc           #6                  \/\/ String B ordinal is :\n      16: invokevirtual #7                  \/\/ Method java\/lang\/StringBuilder.append:(Ljava\/lang\/String;)Ljava\/lang\/StringBuilder;\n      19: getstatic     #8                  \/\/ Field Test$A.B:LTest$A;\n      22: invokevirtual #9                  \/\/ Method Test$A.ordinal:()I\n      25: invokevirtual #10                 \/\/ Method java\/lang\/StringBuilder.append:(I)Ljava\/lang\/StringBuilder;\n      28: invokevirtual #11                 \/\/ Method java\/lang\/StringBuilder.toString:()Ljava\/lang\/String;\n      31: invokevirtual #12                 \/\/ Method java\/io\/PrintStream.println:(Ljava\/lang\/String;)V\n      34: getstatic     #13                 \/\/ Field Test$1.$SwitchMap$Test$A:[I\n      37: aload_1\n      38: invokevirtual #9                  \/\/ Method Test$A.ordinal:()I\n      41: iaload\n      42: tableswitch   { \/\/ 1 to 3\n                     1: 68\n                     2: 79\n                     3: 90\n               default: 101\n          }\n      68: getstatic     #3                  \/\/ Field java\/lang\/System.out:Ljava\/io\/PrintStream;\n      71: ldc           #14                 \/\/ String This A\n      73: invokevirtual #12                 \/\/ Method java\/io\/PrintStream.println:(Ljava\/lang\/String;)V\n      76: goto          109\n      79: getstatic     #3                  \/\/ Field java\/lang\/System.out:Ljava\/io\/PrintStream;\n      82: ldc           #15                 \/\/ String This B\n      84: invokevirtual #12                 \/\/ Method java\/io\/PrintStream.println:(Ljava\/lang\/String;)V\n      87: goto          109\n      90: getstatic     #3                  \/\/ Field java\/lang\/System.out:Ljava\/io\/PrintStream;\n      93: ldc           #16                 \/\/ String This C\n      95: invokevirtual #12                 \/\/ Method java\/io\/PrintStream.println:(Ljava\/lang\/String;)V\n      98: goto          109\n     101: getstatic     #3                  \/\/ Field java\/lang\/System.out:Ljava\/io\/PrintStream;\n     104: ldc           #17                 \/\/ String Default.\n     106: invokevirtual #12                 \/\/ Method java\/io\/PrintStream.println:(Ljava\/lang\/String;)V\n     109: return\n}\n\n<\/code><\/pre>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u6b64\u5904\u5bf9\u6bd4\u7b2c\u4e00\u6bb5\u4ee3\u7801\u7684\u53cd\u7f16\u8bd1\u7ed3\u679c\uff0c\u9700\u8981\u5173\u6ce8\u4e24\u4e2a\u70b9\uff1a<\/p>\n<ol>\n<li>\n\u7b2c\u4e8c\u90e8\u5206\u7684\u7b2c\u56db\u5341\u4e8c\u884c\uff0c<code>switch<\/code>\u5728\u8fd9\u91cc\u88ab\u7f16\u8bd1\u6210<code>tableswitch<\/code>\u6307\u4ee4\uff0c\u548c\u4e4b\u524d\u7684<code>lookupswitch<\/code>\u4e0d\u540c\uff1b<\/li>\n<li>\ntableswitch\u4e2d\u7684\u5185\u5bb9\uff0c\u6761\u4ef6\u6210\u4e86\u987a\u5e8f\u76841\u30012\u30013\uff1b<\/li>\n<li>\n<code>switch(a)<\/code>\uff0c\u91c7\u7528\u7684\u662f<code>Test$A.ordinal()<\/code>\u65b9\u6cd5\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u679a\u4e3e\u503c\u8f6c\u6362\u4e3a\u6574\u578b\u6765\u505a<code>switch<\/code>\u5224\u65ad\uff0c\u91c7\u7528\u7684\u662f\u679a\u4e3e\u503c\u7684<code>ordinal<\/code>\u65b9\u6cd5\uff1b<\/li>\n<\/ol>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\uff08\u7701\u7565Test$A.class\u5b57\u8282\u7801\uff0c\u4e0e\u6b64\u5904\u8ba8\u8bba\u5185\u5bb9\u5173\u7cfb\u4e0d\u5927\uff09<\/p>\n<h3>\nTest$1.class\u5b57\u8282\u7801<\/h3>\n<pre><code class=\"language-java\">Compiled from &quot;Test.java&quot;\nclass Test$1 {\n  static final int[] $SwitchMap$Test$A;\n\n  static {};\n    Code:\n       0: invokestatic  #1                  \/\/ Method Test$A.values:()[LTest$A;\n       3: arraylength\n       4: newarray       int\n       6: putstatic     #2                  \/\/ Field $SwitchMap$Test$A:[I\n       9: getstatic     #2                  \/\/ Field $SwitchMap$Test$A:[I\n      12: getstatic     #3                  \/\/ Field Test$A.B:LTest$A;\n      15: invokevirtual #4                  \/\/ Method Test$A.ordinal:()I\n      18: iconst_1\n      19: iastore\n      20: goto          24\n      23: astore_0\n      24: getstatic     #2                  \/\/ Field $SwitchMap$Test$A:[I\n      27: getstatic     #6                  \/\/ Field Test$A.C:LTest$A;\n      30: invokevirtual #4                  \/\/ Method Test$A.ordinal:()I\n      33: iconst_2\n      34: iastore\n      35: goto          39\n      38: astore_0\n      39: getstatic     #2                  \/\/ Field $SwitchMap$Test$A:[I\n      42: getstatic     #7                  \/\/ Field Test$A.A:LTest$A;\n      45: invokevirtual #4                  \/\/ Method Test$A.ordinal:()I\n      48: iconst_3\n      49: iastore\n      50: goto          54\n      53: astore_0\n      54: return\n    Exception table:\n       from    to  target type\n           9    20    23   Class java\/lang\/NoSuchFieldError\n          24    35    38   Class java\/lang\/NoSuchFieldError\n          39    50    53   Class java\/lang\/NoSuchFieldError\n}\n\n<\/code><\/pre>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\uff08\u5982\u679c\u5b57\u8282\u7801\u770b\u4e0d\u6e05\u695a\uff0c\u53ef\u4ee5\u4f7f\u7528\u5176\u4ed6\u53cd\u7f16\u8bd1\u5de5\u5177\uff0c\u8ba9\u4ee3\u7801\u66f4\u53ef\u8bfb\uff09\u53ef\u4ee5\u770b\u5230\u8fd9\u4e2aTest$1.class\u7684\u5b57\u8282\u7801\uff0c\u5176\u5b9e\u662f\u521b\u5efa\u4e86\u4e00\u4e2a<code>SwtichMap<\/code>\u7684\u4e00\u7ef4\u6570\u7ec4\uff0c\u4e0b\u6807\u662f\u679a\u4e3e\u7c7b\u4e0d\u540c\u503c\u7684<code>ordinal<\/code>\u503c\uff0c\u5bf9\u5e94\u7684\u503c\u662f\u987a\u5e8f\u6574\u578b\uff1a1\u30012\u30013\uff0c\u4e5f\u5c31\u662f\uff1a<\/p>\n<pre><code class=\"language-ascii\">+------------------+-----------------+-----------------+\n|                  |                 |                 |\n|  A.A.ordinal()   |  A.B.ordinal()  |  A.C.ordinal()  |\n|                  |                 |                 |\n+--------+---------+--------+--------+---------+-------+\n         |                  |                  |\n         v                  v                  v\n    +----+----+        +----+----+       +-----+----+\n    |    3    |        |    1    |       |     2    |\n    +---------+        +---------+       +----------+\n\n<\/code><\/pre>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u5bf9\u7167<code>Test.class<\/code>\u5b57\u8282\u7801\u7684\u4e09\u6761\u6ce8\u610f\u5185\u5bb9\u4e2d\u7684\u540e\u4e24\u6761\uff0c\u53ef\u4ee5\u770b\u5230\uff0c<code>switch()<\/code>\u4e2d\u4f1a\u4f7f\u7528\u679a\u4e3e\u503c\u7684<code>ordinal<\/code>\u65b9\u6cd5\u83b7\u53d6\u679a\u4e3e\u503c\u5728\u679a\u4e3e\u7c7b\u4e2d\u7684\u4f4d\u7f6e\uff0c\u800c<code>case<\/code>\u4e2d\u4f7f\u7528\u679a\u4e3e\u503c\uff0c\u4f46\u662f\u6761\u4ef6\u503c\u5176\u5b9e\u4e0d\u662f\u4f4d\u7f6e\u6570\u5b57\uff0c\u800c\u662f<code>SwitchMap<\/code>\u4e2d\u5bf9\u5e94\u7684\u503c\uff0c\u800c\u4e0d\u662f\u4e0b\u6807\u3002<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u90a3\u4e48\uff0c<code>tableswitch<\/code>\u548c<code>lookupswitch<\/code>\u6307\u4ee4\u53c8\u6709\u4ec0\u4e48\u4e0d\u540c\u5462\uff1f\u6211\u4eec\u6765\u770b\u4e0b\u7b2c\u4e09\u6bb5\u4ee3\u7801\uff1a<\/p>\n<h3>\n\u7b2c\u4e09\u6bb5\u4ee3\u7801<\/h3>\n<pre><code class=\"language-java\">public class Test {\n    public static void main(String[] args) {\n        switch (2) {\n            case 1:\n                break;\n            case 2:\n                break;\n            case 3:\n                break;\n            case 560:       \/\/ \u7279\u522b\u6ce8\u610f\n                break;\n            case 5:\n                break;\n            case 6:\n                break;\n            case 7:\n                break;\n            case 8:\n                break;\n        }\n    }\n}\n\n<\/code><\/pre>\n<h3>\nTest.class\u5b57\u8282\u7801<\/h3>\n<pre><code class=\"language-java\">public class Test {\n  public Test();\n    Code:\n       0: aload_0\n       1: invokespecial #1                  \/\/ Method java\/lang\/Object.&quot;&lt;init&gt;&quot;:()V\n       4: return\n\n  public static void main(java.lang.String[]);\n    Code:\n       0: iconst_2\n       1: lookupswitch  { \/\/ 8\n                     1: 76\n                     2: 79\n                     3: 82\n                     5: 88\n                     6: 91\n                     7: 94\n                     8: 97\n                   560: 85\n               default: 97\n          }\n      76: goto          97\n      79: goto          97\n      82: goto          97\n      85: goto          97\n      88: goto          97\n      91: goto          97\n      94: goto          97\n      97: return\n}\n\n<\/code><\/pre>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u91cc\u4f7f\u7528\u4e86<code>lookupswitch<\/code>\u3002\u518d\u770b\u4e0b\u7b2c\u56db\u6bb5\u4ee3\u7801\uff1a<\/p>\n<h3>\n\u7b2c\u56db\u6bb5\u4ee3\u7801<\/h3>\n<pre><code class=\"language-java\">public class Test {\n    public static void main(String[] args) {\n        switch (2) {\n            case 1:\n                break;\n            case 2:\n                break;\n            case 3:\n                break;\n            case 4:\n                break;\n            case 5:\n                break;\n            case 6:\n                break;\n            case 7:\n                break;\n            case 8:\n                break;\n        }\n    }\n}\n\n<\/code><\/pre>\n<h3>\nTest.class\u5b57\u8282\u7801<\/h3>\n<pre><code class=\"language-java\">Compiled from &quot;Test.java&quot;\npublic class Test {\n  public Test();\n    Code:\n       0: aload_0\n       1: invokespecial #1                  \/\/ Method java\/lang\/Object.&quot;&lt;init&gt;&quot;:()V\n       4: return\n\n  public static void main(java.lang.String[]);\n    Code:\n       0: iconst_2\n       1: tableswitch   { \/\/ 1 to 8\n                     1: 48\n                     2: 51\n                     3: 54\n                     4: 57\n                     5: 60\n                     6: 63\n                     7: 66\n                     8: 69\n               default: 69\n          }\n      48: goto          69\n      51: goto          69\n      54: goto          69\n      57: goto          69\n      60: goto          69\n      63: goto          69\n      66: goto          69\n      69: return\n}\n\n<\/code><\/pre>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u8fd9\u91cc\u4f7f\u7528\u7684\u662f<code>tableswitch<\/code>\u3002\u770b\u5230\u8fd9\u91cc\uff0c\u662f\u4e0d\u662f\u6709\u611f\u89c9\u4e86\uff1f<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u5176\u5b9e\u4f7f\u7528<code>tableswitch<\/code>\u8fd8\u662f<code>lookupswitch<\/code>\uff0c\u5b8c\u5168\u662f\u770b\u8fd9\u4e2a\u6574\u578b\u6761\u4ef6\u7684\u503c\u904d\u5386\u662f\u5426\u5feb\u6377\uff0c\u5982\u679c\u662f\u8fde\u7eed\u7684\u6574\u578b\u503c\uff0c\u90a3\u4e48\u4ee5\u6570\u7ec4\u65b9\u5f0f\u5b58\u653e<code>\u6761\u4ef6<\/code>\u548c<code>\u6267\u884c\u8bed\u53e5<\/code>\u662f\u5408\u7406\u7684\uff0c\u5176\u67e5\u8be2\u590d\u6742\u5ea6\u4e3aO(1)\u3002\u4f46\u662f\u5982\u679c<code>\u6761\u4ef6<\/code>\u4ee3\u8868\u7684\u6574\u578b\u6570\u4e0d\u662f\u8fde\u7eed\u7684\uff0c\u8b6c\u5982<code>String<\/code>\u5e38\u91cf\u7684<code>hashCode<\/code>\u503c\uff0c\u53c8\u6bd4\u5982\u51fa\u73b0\u4e86<code>560<\/code>\u8fd9\u6837\u7684\u4e0d\u8fde\u7eed\u6570\u5b57\u3002\u90a3\u5c31\u65e0\u6cd5\u4f7f\u7528\u6570\u7ec4\u4e0b\u6807\u4ee3\u66ff<code>\u6761\u4ef6<\/code>\u503c\u6765\u505a\u6620\u5c04\u5173\u7cfb\uff0c\u53ea\u80fd\u91c7\u7528<code>\u6709\u5e8f\u6570\u7ec4\u7684\u4e8c\u5206\u67e5\u627e<\/code>\u65b9\u5f0f\u6765\u63d0\u5347\u6761\u4ef6\u5339\u914d\u6548\u7387\uff0c\u6240\u4ee5\u6709\u4e86<code>lookupswitch<\/code>\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a02019\u5e7404\u670830\u65e5\uff0c\u662f\u4e00\u4e2a\u65e2\u4f24\u611f\u53c8\u5f00\u5fc3\u7684\u65e5\u5b50\u3002 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u56db\u6708\u5c3e\u5df4\u7684\u676d\u5dde\uff0c\u53c8\u5f00\u59cb\u9634\u6c89\u6c89\u7684\uff0c\u539a\u91cd\u7684\u4e91\u6735\u542b\u7740\u4e30\u5bcc\u7684\u96e8\u6c34\uff0c\u60ac\u5728\u7a7a\u4e2d\u3002\u6211\u548c\u5c3d\u54e5\uff08\u5b64\u5c3d\uff09\u5728\u5bb6\u8fb9\u4e0a\u7684\u4e34\u5e73\u6c34\u666f\u516c\u56ed\u6709\u5b5a\u8336\u4e66\u5c4b\uff0c\u4ece\u65e9\u4e0a\u5341\u70b9\u804a\u5230\u4e86\u4e0b\u5348\u56db\u70b9\u534a\u3002\u4ece\u5b66\u4e60\u5230\u5de5\u4f5c\uff0c\u6e90\u7801\u5230\u751f\u6d3b\uff0c\u804a\u5f97\u662f\u9163\u7545\u6dcb\u6f13\u3002\u60f3\u8bf4\u4ec0\u4e48\uff0c\u90fd\u8bf4\u4e86\uff0c\u60f3\u8868\u8fbe\u7684\u656c\u4f69\u548c\u9057\u61be\uff0c\u4e5f\u90fd\u503e\u8bc9\u4e86\uff0c\u4e5f\u8bb8\uff0c\u5c3d\u54e5\uff0c\u80fd\u4ea6\u5e08\u4ea6\u53cb\u5427\u3002 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u5176\u5b9e\u5230\u4e86\u6210\u5e74\u4eba\uff0c\u6709\u4e9b\u82e6\u5934\u662f\u4e00\u5b9a\u8981\u53bb\u7ecf\u5386\uff0c\u4e5f\u4e00\u5b9a\u8981\u53bb\u81ea\u5df1\u5403\u8fc7\uff0c\u624d\u77e5\u9053\u7684\u3002\u6b63\u662f\u8fd9\u4e9b\u82e6\u5934\u7684\u5b58\u5728\uff0c\u8ba9\u4eba\u89c9\u5f97\u4eba\u751f\u6709\u771f\u5b9e\u5b58\u5728\u611f\uff0c\u4e5f\u6b63\u662f\u5927\u5927\u5c0f\u5c0f\u7684\u6bcf\u4e00\u4e2a\u9009\u62e9\uff0c\u6709\u4e86\u73b0\u5728\u7684\u4eba\u751f\u548c\u672a\u6765\u7684\u53ef\u80fd\u3002\u6709\u4e9b\u4e8b\uff0c\u6211\u61c2\uff0c\u6709\u4e9b\u4e8b\uff0c\u6211\u9700\u8981\u53bb\u61c2\uff0c\u5185\u5fc3\u6000\u7740\u611f\u6fc0\u4e4b\u60c5\uff0c\u5bf9\u4e8e\u8fc7\u5f80\u7684\u4eba\u548c\u4e8b\uff0c\u90fd\u6709\u4e00\u9897\u611f\u6069\u7684\u5fc3\uff0c\u6211\u60f3\u6211\u662f\u5e78\u8fd0\u548c\u5e78\u798f\u7684\u3002 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u5bf9\u4e8e\u5c3d\u54e5\uff0c\u6211\u4e00\u76f4\u4ee5\u6765\u90fd\u662f\u94a6\u4f69\u7684\uff1a\u4e00\u4e2a\u7537\u4eba\uff0c\u80fd\u53d7\u5f97\u4e86\u59d4\u5c48\uff0c\u62c5\u5f97\u8d77\u8d23\u4efb\uff0c\u6297\u5f97\u4e86\u5927\u65d7\uff0c\u8fd9\u662f\u96be\u80fd\u53ef\u8d35\u7684\u3002\u6709\u65f6\u5019\uff0c\u8fd8\u80fd\u7ec6\u817b\u5982\u4e1d\uff0c\u5173\u6000\u5907\u81f3\uff0c\u7740\u5b9e\u8ba9\u6211\u5728\u51b0\u51b7\u7684\u4f01\u4e1a\u673a\u5668\u4e2d\uff0c\u611f\u53d7\u5230\u5bb6\u7684\u6e29\u6696\uff0c\u800c\u4e0d\u662f\u6218\u573a\u7684\u5200\u5149\u5251\u5f71\u3002 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u4eca\u5929\uff0c\u6211\u4eec\u63a2\u8ba8\u4e86\u5f88\u591a\uff0c\u751f\u6d3b\u505a\u4eba\u65b9\u9762\u7684\u4e8b\uff0c\u6211\u60f3\u5c31\u5199\u5230\u8fd9\u91cc\uff0c\u63a5\u4e0b\u53bb\u7684\uff0c\u60f3\u8bb0\u5f55\u4e0b\u4eca\u5929\u4eceJava switch\u8bed\u53e5\u4e2d\u5b66\u5230\u7684\u4e1c\u897f\u3002 \u5de5\u5177 java javac javap diff \u4ee3\u7801 \u7b2c\u4e00\u6bb5\u4ee3\u7801 public class Test { public static void main(String[] args) { switch (&quot;H&quot;) { case &quot;A&quot;: break; case &quot;xxxx&quot;: break; } } } Test.class\u5b57\u8282\u7801 Compiled from &quot;Test.java&quot; public class Test { public Test(); Code: 0: aload_0 1: invokespecial #1 \/\/ Method java\/lang\/Object.&quot;&lt;init&gt;&quot;:()V 4: &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/huzi-baozi.com\/?p=1165\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;\u6ce8\u5b9a\u662f\u96be\u5fd8\u7684\u65e5\u5b50&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1165","post","type-post","status-publish","format-standard","hentry","category-study"],"_links":{"self":[{"href":"https:\/\/huzi-baozi.com\/index.php?rest_route=\/wp\/v2\/posts\/1165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/huzi-baozi.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/huzi-baozi.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/huzi-baozi.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/huzi-baozi.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1165"}],"version-history":[{"count":2,"href":"https:\/\/huzi-baozi.com\/index.php?rest_route=\/wp\/v2\/posts\/1165\/revisions"}],"predecessor-version":[{"id":1168,"href":"https:\/\/huzi-baozi.com\/index.php?rest_route=\/wp\/v2\/posts\/1165\/revisions\/1168"}],"wp:attachment":[{"href":"https:\/\/huzi-baozi.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/huzi-baozi.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/huzi-baozi.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}