4

假设您有以下代码:

public int getSpeedX() {
    speedLock.lock();
    try {
        return speedX;
    } finally {
        speedLock.unlock();
    }
}

public void setSpeedX(int x) {
    speedLock.lock();
    try {
        speedX = x;
    } finally {
        speedLock.unlock();
    }
}

回程速度X好吗?或者应该是:

public int getSpeedX() {
    int temp;
    speedLock.lock();
    try {
        temp = speedX;
    } finally {
        speedLock.unlock();
    }
    return temp;
}

哪个是对的?或者它们是等价的吗?

4

4 回答 4

6

它们是等价的。块中的任何内容都会finally被执行,无论块是如何退出的(例如,从底部流出的流控制、返回语句或异常)。

于 2011-11-14T21:58:17.363 回答
1

他们都工作并且是相同的。第一个是优化的。看看这个,那个应该回答你的问题。第一个链接中的这个链接

复制到本地生成最小的字节码,对于低级代码,编写更接近机器的代码是很好的

于 2011-11-14T22:01:32.063 回答
0

java.util.concurrent.locks.ReentrantReadWriteLock

http://download.oracle.com/javase/1,5,0/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html

于 2011-11-14T22:02:15.087 回答
0

我将选择第一个保持 getter 签名干净整洁(无参数)的方法。finally我会在那里放一个小评论来记录块总是被执行的事实。作为记录,我实际上曾经从我的一位同事那里得到完全相同的问题,从那时起,我总是尝试评论这种编码,以便为我的代码读者节省一些谷歌搜索时间。

于 2011-11-14T22:14:23.167 回答