Java中return语句中的减量(或增量)运算符

Java中return语句中的减量(或增量)运算符,java,Java,我在我的web应用程序中实现分页(使用Spring和Hibernate),在这里我需要如下内容 public static int deleteSingle(long totalRows, long pageSize, int currentPage) { return totalRows==currentPage*pageSize-pageSize ? currentPage-- : currentPage; } 假设我从某处调用这个方法,如下所示 deleteSingle(24, 2

我在我的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;
    }
}
public static int deleteSingle(长totalRows、长pageSize、int currentPage)
{
如果(totalRows==currentPage*pageSize pageSize)
{

currentPage=currentPage-1;//在您的return语句中,它使用了
currentPage--
,这会导致返回后的减量。您希望
--currentPage
在返回前进行减量。就个人而言,对于这样一个复杂的语句,出于可读性的考虑,您可能无论如何都想将其打破,但这是一个错误优先权

(从技术上讲,它在读取后会递减。当它递减时,返回语句会发生变化,这并没有什么特别之处。)

如果由我决定,我的口味是:

public static int deleteSingle(long totalRows, long pageSize, int currentPage)
{
    if(totalRows==currentPage*pageSize-pageSize)
    {
        currentPage--;
    }
    return currentPage;

}

在return语句中,它使用了
-currentPage--
,这会导致返回后的减量。您希望
--currentPage
在返回前进行减量。就个人而言,对于这样一个复杂的语句,出于可读性的考虑,您可能无论如何都想将其分解,但这是一个偏好问题

(从技术上讲,它在读取后会递减。当它递减时,返回语句会发生变化,这并没有什么特别之处。)

如果由我决定,我的口味是:

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 正如所料

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
(请记住,这样的重新分配在方法范围之外是不可见的)


前缀减量运算符包含在JLS的中。请注意以下句子:

前缀减量表达式的值是存储新值后的变量值

请注意,
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 正如所料

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
(请记住,这样的重新分配在方法范围之外是不可见的)


前缀减量运算符包含在JLS的中。请注意以下句子:

前缀减量表达式的值是存储新值后的变量值


尽管如此,由于
--
++
什么也不做,编译器可能会创建警告或编译错误。也许findbugs会找到它?@owlstead,但操作符确实做了一些事情。我相信有一个findbugs检查,不过,操作符所做的并不总是程序员希望它做的。减量怎么可能在方法返回后发生?因为
currentPage
只是内存中某个地方的一个数字。考虑到它是一个参数,并且在返回后无法读取,所以减小它是毫无用处的,但它确实发生了。(优化器很可能会实际删除执行它的字节码,但从逻辑上讲,没有理由认为它不会被递减,而只是被零访问。)尽管如此,由于
--
++
什么也不做,编译器可能会创建警告或编译错误。也许findbugs会找到它?@owlstead,但操作符确实做了一些事情。我相信有一个findbugs检查,不过,操作符所做的并不总是程序员希望它做的。减量怎么可能在方法返回后发生?因为
currentPage
只是内存中某个地方的一个数字。考虑到它是一个参数,并且在返回后无法读取,所以减小它是毫无用处的,但它确实发生了。(优化器很可能会实际删除执行它的字节码,但从逻辑上讲,没有理由认为它不会被递减,而只是被零访问。)减量怎么可能在方法返回后发生?它不会在方法返回后发生,只是操作的结果
x--
不是
x
的新值,而是原始值(减量前)。变量将被递减。换句话说,
x--
--x
x
执行相同的操作,但它们返回不同的值。减量怎么可能在方法返回后发生?它不会在方法返回后发生,只是操作的结果
x--
不是
x
的新值,而不是原始值(减量之前)。变量将被减量。换句话说,
x--
--x
x
执行相同的操作,但返回不同的值。