当前位置: 首页 > news >正文

有趣的网站有哪些用vs2010做网站导航

有趣的网站有哪些,用vs2010做网站导航,手机网站怎么打开,温州网站排名优化前面我们已经知道 String 的 switch-case 实现原理 依据 case 值的稀疏程度#xff0c;分别由两个指令 - tableswitch 和 lookupswitch 实现#xff0c;但是这两个指令都支持整型#xff0c; 如何让 String 类型的值 也支持 String 的 switch-case 实现原理 public class T…前面我们已经知道 String 的 switch-case 实现原理 依据 case 值的稀疏程度分别由两个指令 - tableswitch 和 lookupswitch 实现但是这两个指令都支持整型 如何让 String 类型的值 也支持 String 的 switch-case 实现原理 public class Test {public int switchInt(String name) {int result;switch (name) {case Java:result 100;break;case Go:result 200;break;case Kotlin:result 300;break;default:result -1;}return result;}}javac public class Test {public Test() {}public int switchInt(String var1) {byte var4 -1;switch(var1.hashCode()) {case -2041707231:if (var1.equals(Kotlin)) {var4 2;}break;case 2312:if (var1.equals(Go)) {var4 1;}break;case 2301506:if (var1.equals(Java)) {var4 0;}}byte var2;switch(var4) {case 0:var2 10;break;case 1:var2 20;break;case 2:var2 30;break;default:var2 40;}return var2;} }字节码 C:\javac Test.javaC:\javap -c -p Test.classCompiled from Test.java public class com.yxzapp.Test {public com.yxzapp.Test();Code:0: aload_01: invokespecial #1 // Method java/lang/Object.init:()V4: returnpublic int switchInt(java.lang.String);Code:0: aload_1 // 使用iload加载局部变量第1个变量加载栈上1: astore_3 // 将栈顶数据存储到局部变量下标为3的位置2: iconst_m1 // 将 int 类型值 -1 压栈到栈顶3: istore 4 // 将栈顶元素存储到局部变量第四个位置5: aload_3 // 加载局部变量第3个变量加载栈上6: invokevirtual #2 // Method java/lang/String.hashCode:()I9: lookupswitch { // 3 // 调用 hashcode 方法 得到一个整型值。 因为哈希值一般比较离散所以没有选用tablesw itch采用lookupswitch 作为实现 -2041707231: 74 // 对应 Kotlin2312: 59 // 对应 Go2301506: 44 // 对应 Javadefault: 86 }44: aload_345: ldc #3 // String Java 47: invokevirtual #4 // Method java/lang/String.equals:(Ljava/lang/Object;)Z // 执行equals 方法50: ifeq 86 // 判断是否相等53: iconst_0 // 将 int 类型值1压栈到栈顶54: istore 4 // 将栈顶int的数据存储到局部变量表的第四个 位置56: goto 86 // 跳转到86行继续执行59: aload_3 60: ldc #5 // String Go62: invokevirtual #4 // Method java/lang/String.equals:(Ljava/lang/Object;)Z 65: ifeq 86 68: iconst_1 69: istore 4 71: goto 86 74: aload_375: ldc #6 // String Kotlin77: invokevirtual #4 // Method java/lang/String.equals:(Ljava/lang/Object;)Z // 执行equals 方法80: ifeq 8683: iconst_284: istore 486: iload 488: tableswitch { // 0 to 20: 1161: 1222: 128default: 134}116: bipush 10118: istore_2119: goto 137122: bipush 20124: istore_2125: goto 137128: bipush 30130: istore_2131: goto 137134: bipush 40136: istore_2137: iload_2138: ireturn }可以看到 switch 作用在 String 上最终拆分成两个针对整型 switch 语句具体流程为 做初始化操作把入参 name 赋值给局部变量表下标为3的变量 把初始化局部变量表中位置为4的变量为 -1 0 1 2 4 this 入参name “java” -1调用 “java” 的 hashCode 方法得到一个整型值。因为哈希值一般比较离散所以没有选用tableswitch采用lookupswitch 作为实现如果 hashCode 等于 字符串 “Java” 的 hashCode会跳转到 44 行继续执行判断是否相等的指令如果等于 0 则跳转对应字节码处相等则把 -1 赋值为 0 看到这里可以能会发现 字符串的 hashCode冲突要怎么样解决 public class Test {public int switchInt(String name) {int result;switch (name) {case Aa:result 10;break;case BB:result 20;break;default:result 40;}return result;}}javac public class Test {public Test() {}public int switchInt(String var1) {byte var4 -1;switch(var1.hashCode()) {case 2112:if (var1.equals(BB)) {var4 1;} else if (var1.equals(Aa)) {var4 0;}default:byte var2;switch(var4) {case 0:var2 10;break;case 1:var2 20;break;default:var2 40;}return var2;}} }字节码 C:\javac Test.javaC:\javap -c -p Test.class Compiled from Test.java public class com.yxzapp.Test {public com.yxzapp.Test();Code:0: aload_01: invokespecial #1 // Method java/lang/Object.init:()V4: returnpublic int switchInt(java.lang.String);Code:0: aload_11: astore_32: iconst_m13: istore 45: aload_36: invokevirtual #2 // Method java/lang/String.hashCode:()I9: lookupswitch { // 12112: 28default: 55}28: aload_329: ldc #3 // String BB31: invokevirtual #4 // Method java/lang/String.equals:(Ljava/lang/Object;)Z34: ifeq 4337: iconst_138: istore 440: goto 5543: aload_344: ldc #5 // String Aa46: invokevirtual #4 // Method java/lang/String.equals:(Ljava/lang/Object;)Z49: ifeq 5552: iconst_053: istore 455: iload 457: lookupswitch { // 20: 841: 90default: 96}84: bipush 1086: istore_287: goto 9990: bipush 2092: istore_293: goto 9996: bipush 4098: istore_299: iload_2100: ireturn }可以看到34 行在 hashCode 冲突的情况下编译器的处理不过是多一次调用字符串 equals 判断相等的比较 。与 BB 不相等的情况 会继续判断是否等于 Aa
http://www.pierceye.com/news/621770/

相关文章:

  • 哪个小说网站可以做封面中国软件园排名前十
  • 门户网站建设预算表十大软件免费下载安装手机版
  • 河南省安阳市建设银行网站wordpress会员卡
  • 旅游类网站怎么做网站前端设计
  • 涉县网站设计商城网站建设推荐
  • 网站注册了域名然后怎么做网站运维是做什么的
  • 深圳学校网站建设哪家好企业宣传网
  • 静态网站如何添加关键词xp花生壳做网站
  • 南宁霸屏网站开发国际数据公司idc
  • 百色建设网站广西建设监理协会网站
  • 天河营销型网站建设惠东网站设计
  • 网站建设用什么科目qq腾讯官网登录入口
  • 做网站硬件手表网站哪个最好知乎
  • 网站制作教程及流程网站优化常见的优化技术
  • 漯河网站建设-千弘网络品划网络做网站
  • 专业广州做网站公司简历网站免费
  • 广州h5网站制作公司营销网站的筛选
  • 国内最新新闻热点事件摘抄seo诊断书
  • 专业的免费网站建设哪家如何优化网站图片
  • 网站开发哪个更专业国家企业信用信息系统(全国)
  • 中小企业网站制作不了国外网站用什么dns
  • word网站的链接怎么做的网页设计大赛网站开发
  • dede网站模板 音响海外酒店 网站建设
  • 深圳 网站建设公司南宁网站忧化
  • 做油和米的网站山西省网站备案
  • 做网站有陪标现象吗成都建设网站专业公司
  • 莱阳 网站建设博罗做网站公司
  • 简易个人网站模板推广一款app的营销方案
  • 小城镇建设有关网站起飞页怎么做网站
  • 网站影响seo的标签网站用国外的服务器打不开