访谈主题:此代码可能出现什么问题?

时间:2013-08-13 08:11:17

标签: java spring

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

public class Calculator { 
    int result; 

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

这可能会出现什么问题?

3 个答案:

答案 0 :(得分:31)

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

答案 1 :(得分:13)

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

要解决此问题,您可以改为long

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

小心点result = first + second;,因为将添加两个int,给出int(可能会溢出),然后只会转换为{ {1}}。

long相当于result = (long)first + second;(不是result = ((long)first) + second;),这意味着我们首先将result = (long)(first + second);之一转换为int,因此它将是long,其中包含long + int

答案 2 :(得分:7)

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

public class Calculator { 
      public int addTwoNumbers(int first, int second) { 
        return first + second; 
     } 
}