簡體   English   中英

Java的return語句中的減量(或增量)運算符

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM