checking for X11/extensions/shape.h… configure: error: Could not find all X11 headers (shape.h Xrender.h XTest.h Intrinsic.h). You might be able to fix this by running ‘sudo yum install libXtst-devel libXt-devel libXrender-devel libXi-devel’.
如果 hashCode 匹配,进入下一步的字符串验证,比较输入字符串和 case 中的字符串是否相同(使用 equals 方法)。
如果 hashCode 匹配,但 equals 不匹配,说明产生了 哈希冲突,跳过此 case,继续寻找下一个匹配的 case 标签。
如果没有任何匹配项,则执行 default 代码块(如果有 default)。
3. 示例及工作原理
以如下代码为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public class SwitchWithStringExample { public static void main(String[] args) { String day = "MONDAY";
switch (day) { case "MONDAY": System.out.println("Start of the work week!"); break; case "FRIDAY": System.out.println("End of the work week!"); break; default: System.out.println("Midweek day"); break; } } }
编译后(伪代码):
编译后的代码大致等效于:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
int hash = day.hashCode(); switch (hash) { case 744853702: // hash code for "MONDAY" if (day.equals("MONDAY")) { System.out.println("Start of the work week!"); break; } case -1402213467: // hash code for "FRIDAY" if (day.equals("FRIDAY")) { System.out.println("End of the work week!"); break; } default: System.out.println("Midweek day"); break; }
解释
day.hashCode() 计算的整数值会用于 switch 语句的分支选择。
在每个 case 中,首先通过 hashCode 值判断是否有可能匹配。如果 hashCode 相同(744853702 对应 “MONDAY”,-1402213467 对应 “FRIDAY”),进一步使用 equals 比较字符串内容,以确认 day 确实为该 case 语句指定的字符串。
default 匹配 hashCode 和 equals 都未匹配的情况,表示该 switch 中无对应的 case 分支。
public class BigDecimalTest { public static void main(String[] args) { BigDecimal a = new BigDecimal("0.1"); BigDecimal b = a.multiply(new BigDecimal("3")); System.out.println(b.equals(new BigDecimal("0.3"))); // 输出:true } }
class Solution { public int[] twoSum(int[] nums, int target) { HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>(); for (int i = 0; i < nums.length; i++) { if (!hashMap.containsKey(target - nums[i])) { hashMap.put(nums[i], i); } else { return new int[]{hashMap.get(target - nums[i]), i}; } } return new int[]{}; } }