在Java中的return语句中减少(或增加)运算符
我在我的web应用程序(使用Spring和Hibernate)中实现分页,在那里我需要类似下面的东西。在Java中的return语句中减少(或增加)运算符
public static int deleteSingle(long totalRows, long pageSize, int currentPage)
{
return totalRows==currentPage*pageSize-pageSize ? currentPage-- : currentPage;
}
假设我从下面的某个地方调用这个方法。
deleteSingle(24, 2, 13);
利用这些参数,则满足条件,且应返回的变量currentPage
(即13)减1的值(即12),但它不递减的currentPage
值。在此调用之后,它返回原始值13。
我不得不改变像下面的方法,使其按预期工作。
public static int deleteSingle(long totalRows, long pageSize, int currentPage)
{
if(totalRows==currentPage*pageSize-pageSize)
{
currentPage=currentPage-1; //<-------
return currentPage; //<-------
}
else
{
return currentPage;
}
}
那么为什么没有递减1与递减运算符的价值 - currentPage--
?为什么它需要 - currentPage=currentPage-1;
在这种情况下?
在您的退货声明中,它使用currentPage--
,这会导致返回后的递减量。您希望--currentPage
在退货之前执行递减操作。就个人而言,像这样复杂的陈述,为了可读性,您可能想要分解它,但这是一个偏好问题。
(从技术上讲,它它的读取之后递减没有什么特别的地方是一个return语句时,它decremements改变。)
如果是到了我,我的口味会做到这一点:
public static int deleteSingle(long totalRows, long pageSize, int currentPage)
{
if(totalRows==currentPage*pageSize-pageSize)
{
currentPage--;
}
return currentPage;
}
注意x--
x
使用后其价值递减,你可能想--currentPage
,这将利用其价值递减之前变量。
看到这一点,考虑:
public static int deleteSingle(long totalRows, long pageSize, int currentPage) {
try {
return totalRows == currentPage * pageSize - pageSize ? currentPage--
: currentPage;
} finally {
System.out.println("*" + currentPage); // value after return
}
}
调用deleteSingle(24, 2, 13)
打印:
*12 13
如果我们--currentPage
取代currentPage--
,我们得到:
*12 12
如预期。
但是,你不觉得简单地用currentPage - 1
代替它会更好吗?在这种情况下没有理由重新分配currentPage
(请记住,这样的重新分配在该方法的范围之外将不可见)。
JLS的§15.15.2中包含前缀递减运算符。注意句子:
前缀减量表达式的值是新的值存储在变量的后的值。
但是,由于'--'或'++'什么都不做,编译器可能会产生警告或编译错误。也许findbugs会找到它? – 2013-03-04 22:51:57
@owlstead,但运营商确实做了一些事情。但我确实相信有一个findbugs检查,但是,操作员所做的并不总是程序员希望它做的事情。 – corsiKa 2013-03-04 22:57:56
该方法返回后如何发生递减? – Tiny 2013-03-04 23:07:46