除了这种方式之外,还有其他方法可以检查值是否在某个范围之间吗?
Is there a different way to check if a value is between a certain range other than this way?
例如,我想检查一个值是否大于或等于 x,但小于或等于 y。
我认为我只需要像这样使用逻辑 "and" 运算符:
if(value >= x && value <= y) {
do something
}
它奏效了,但我很想知道是否还有其他方法可以达到相同的结果。
另一种方法是使用 Java.lang.Math
库。
Math.max(Math.min(value, max), min) == value
你可以使用 Guava 的 Range
:
if (Range.closed(x, y).contains(value))
int
s 真的没有意义(尤其是考虑到自动装箱),但它对其他 Comparable
值很有用。
如其他答案所示,还有其他方法 - 但您的方法是完全规范的。
是:
- 清除
- 不需要外部引用或熟悉外部 API
- 尽可能高效 - 而且它 明显 高效,从某种意义上说,我不必去猜测内联和其他 Hotspot 魔术,并且没有使我的 railway run badly
的条件
- 免于混淆 open/closed 范围:我可以看到它是一个包含所有范围的范围,如果你想改变它,它是一个字符的改变(想象一下用数学计算出来。min/max版本!)
很漂亮。不要改变它。
考虑为这些事情创建自己的静态实用程序类。
public final class IntUtil
{
// ...
public static boolean isBetween(int value, int min,int max)
{
return value >= min && value <= max;
}
// ...
}
例如,我想检查一个值是否大于或等于 x,但小于或等于 y。
我认为我只需要像这样使用逻辑 "and" 运算符:
if(value >= x && value <= y) {
do something
}
它奏效了,但我很想知道是否还有其他方法可以达到相同的结果。
另一种方法是使用 Java.lang.Math
库。
Math.max(Math.min(value, max), min) == value
你可以使用 Guava 的 Range
:
if (Range.closed(x, y).contains(value))
int
s 真的没有意义(尤其是考虑到自动装箱),但它对其他 Comparable
值很有用。
如其他答案所示,还有其他方法 - 但您的方法是完全规范的。
是:
- 清除
- 不需要外部引用或熟悉外部 API
- 尽可能高效 - 而且它 明显 高效,从某种意义上说,我不必去猜测内联和其他 Hotspot 魔术,并且没有使我的 railway run badly 的条件
- 免于混淆 open/closed 范围:我可以看到它是一个包含所有范围的范围,如果你想改变它,它是一个字符的改变(想象一下用数学计算出来。min/max版本!)
很漂亮。不要改变它。
考虑为这些事情创建自己的静态实用程序类。
public final class IntUtil
{
// ...
public static boolean isBetween(int value, int min,int max)
{
return value >= min && value <= max;
}
// ...
}