我在我的Web应用程序(使用Spring和Hibernate)中实现了分页,我需要的东西如下所示。
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;
?
答案 0 :(得分:5)
在你的return语句中,它使用currentPage--
导致返回后的减量。您希望--currentPage
在返回之前执行减量。就个人而言,有了这样一个复杂的陈述,你可能想要为了可读性而打破它,但这是一个偏好的问题。
(从技术上讲,它会在读完后递减。没有什么特别的,它是一个在递减时会发生变化的返回语句。)
如果由我决定,我的意思是这样做:
public static int deleteSingle(long totalRows, long pageSize, int currentPage)
{
if(totalRows==currentPage*pageSize-pageSize)
{
currentPage--;
}
return currentPage;
}
答案 1 :(得分:4)
请注意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中。注意这句话:
前缀减量表达式的值是存储新值后变量的值。