[英]Decrement (or increment) operator in return statement in Java
我在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;
}
}
那么为什么不使用减数运算符currentPage--
将值减1? 为什么需要currentPage=currentPage-1;
在这种情况下?
在您的return语句中,它使用currentPage--
在返回之后导致递减。 您希望--currentPage
在返回之前进行递减。 就个人而言,使用诸如此类的复杂语句,您可能还是希望出于可读性的考虑而将其分解,但这是优先考虑的问题。
(从技术上讲,它在读取后会递减。当它递减时,返回值会发生变化,这没有什么特别的。)
如果由我决定,我的爱好是这样做:
public static int deleteSingle(long totalRows, long pageSize, int currentPage)
{
if(totalRows==currentPage*pageSize-pageSize)
{
currentPage--;
}
return currentPage;
}
请注意, x--
在使用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
, --currentPage
收到:
*12 12
如预期的那样。
但是 ,您是否认为仅使用currentPage - 1
会更好? 在这种情况下,没有理由重新分配 currentPage
(请记住,这种重新分配在方法范围之外是不可见的)。
前缀减量运算符在JLS的第15.15.2节中介绍。 注意以下句子:
前缀减量表达式的值是存储新值之后的变量的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.