Java优化疑问:用数组查询还是OR语句?字符替代字符串更优?
问题解答
一、直接OR语句 vs 数组流查询的优劣
先纠正示例1的错误
你示例1里用==比较字符串是错误的!Java中==比较的是字符串对象的引用地址,不是内容。如果number是通过new String("6")创建的,或者不是常量池里的对象,==会返回false,正确写法应该用equals():
String number = "6"; if (number.equals("0") || number.equals("2") || number.equals("6") || number.equals("8")) { System.out.println("TRUE"); }
性能与场景对比
- 直接OR语句:性能最优,没有任何额外的对象创建、流初始化开销,就是简单的条件判断,适合选项数量少(比如你这4个)且固定不变的场景。缺点是如果后续要添加/删除选项,得修改if条件,维护起来稍麻烦。
- 数组流方式:代码更简洁,选项集中在数组里,修改选项只需要改数组。但流的创建有一定开销,对于4个元素的场景,性能比直接OR差一点,但日常业务场景中这点差异可以忽略不计。适合选项可能变动、数量较多的场景。
二、更优的查询方式
推荐两种更实用的方案:
1. 使用HashSet
初始化一个静态不可变的HashSet,查询时用contains()方法,时间复杂度O(1),性能稳定,且维护方便:
// 建议把Set定义为静态常量,只初始化一次 private static final Set<String> VALID_NUMBERS = new HashSet<>(Arrays.asList("0", "2", "6", "8")); public static void main(String[] args) { String number = "6"; if (VALID_NUMBERS.contains(number)) { System.out.println("TRUE"); } }
2. 使用字符串Switch语句
Java 7及以上支持字符串类型的switch,代码结构清晰,性能也不错:
String number = "6"; switch (number) { case "0": case "2": case "6": case "8": System.out.println("TRUE"); break; default: // 处理不符合的情况 break; }
三、改为char类型是否更高效易懂?
是的,非常推荐改成char类型:
- 性能更优:char是基本数据类型,内存占用远小于String(String是对象,包含额外的对象头、字符数组等开销)。而且char比较可以直接用
==,不用调用equals(),减少方法调用开销。 - 语义更清晰:你存储的是单个数字字符,用char比String更贴合场景,别人看代码一眼就知道这是单个字符,而不是可能包含多个字符的字符串。
- 代码更简洁:
char number = '6'; if (number == '0' || number == '2' || number == '6' || number == '8') { System.out.println("TRUE"); }
如果用Set的话,char版本也更高效:
private static final Set<Character> VALID_CHARS = new HashSet<>(Arrays.asList('0', '2', '6', '8')); public static void main(String[] args) { char number = '6'; if (VALID_CHARS.contains(number)) { System.out.println("TRUE"); } }
内容的提问来源于stack exchange,提问作者Hero586
相关产品推荐
相关产品推荐

