Java中Integer.compare仅返回-1、0、1吗?正确比较方式咨询
关于Integer.compare方法的常见疑问解答
1. Integer.compare是否仅返回-1、0、1?
是的,以OpenJDK的实现为例,Integer.compare的源码逻辑非常直接:
public static int compare(int x, int y) { return (x < y) ? -1 : ((x == y) ? 0 : 1); }
从代码可以明确看到,它只会返回-1、0、1这三个值。
2. 为什么文档不直接说明返回-1、0、1?
这是出于API契约的灵活性和统一性考虑:
- Java里所有比较类方法(比如Comparator接口的compare方法)的通用契约都是返回负整数、零、正整数来分别表示小于、等于、大于的关系,Integer.compare作为遵循该契约的实现,文档沿用了通用描述,这样即使未来实现有调整(虽然概率极低),只要符合契约就不算破坏API兼容性。
- 同时,这种描述方式也和Long、Short等其他数值类型的compare方法文档保持一致,维持了整个Java API文档的统一性,避免因为单个方法的特殊描述增加开发者的认知成本。
3. 比较时该用if(Integer.compare(2,1) == 1)还是if(Integer.compare(2,1) > 0)?
推荐使用>0(对应x>y场景)、<0(x<y场景)、==0(x==y场景)的写法,原因如下:
- 完全符合方法的官方契约,即便未来实现真的变更(比如返回其他正负值),代码依然能正常运行,健壮性更强。
- 写法和Comparator等通用比较接口的使用习惯一致,减少代码风格的割裂感。
- 避免依赖具体的返回值数字,让代码逻辑更清晰易懂——看
>0就知道是判断前者大于后者,而==1还需要额外记住这个返回值对应的含义。
内容的提问来源于stack exchange,提问作者Joey Zheng
相关产品推荐
相关产品推荐

