13

一个简单的 Calculator 类,在 Web 应用程序中连接为 Spring bean:

public class Calculator { 
    int result; 

    public int addTwoNumbers(int first, int second) { 
        result = first + second; 
        return result; 
    } 
} 

这可能会出现什么问题?

4

3 回答 3

31

多线程问题。默认情况下,Spring bean 是单例的。

于 2013-08-13T08:14:15.937 回答
13

整数溢出是另一个问题,如果这很重要的话。

要解决它,您可以long改为返回:

long result;
public long addTwoNumbers(int first, int second)
{
    result = (long)first + second;
    return result;
}

只说 时要小心result = first + second;,因为int将添加两个 ,给出一个int(可能溢出),然后才将其转换为 a long

result = (long)first + second;等价于result = ((long)first) + second;(not result = (long)(first + second);),这意味着我们将其中一个ints转换为第long一个,所以它将是long + int,这给出了 a long

于 2013-08-13T08:17:29.460 回答
7

假设这是一个 Spring 单例 bean,这个类不是线程安全的。如果两个线程调用 addTwoNumbers,那么第一个线程有可能得到第二个线程的计算结果,所以我们可能会得到 2 + 2 = 5。如果结果字段不应该在其他任何地方使用,则应该去掉它

public class Calculator { 
      public int addTwoNumbers(int first, int second) { 
        return first + second; 
     } 
} 
于 2013-08-13T09:19:48.013 回答