[英]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.