Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 采访主题:这个代码会出什么问题?_Java_Spring - Fatal编程技术网

Java 采访主题:这个代码会出什么问题?

Java 采访主题:这个代码会出什么问题?,java,spring,Java,Spring,在web应用程序中作为SpringBean连接的简单计算器类: public class Calculator { int result; public int addTwoNumbers(int first, int second) { result = first + second; return result; } } 这可能会出什么问题 多线程问题。默认情况下,SpringBean是单例的。整数溢出是另一个问题,如

在web应用程序中作为SpringBean连接的简单计算器类:

public class Calculator { 
    int result; 

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

这可能会出什么问题

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

整数溢出是另一个问题,如果这样算的话

要解决此问题,您可以返回
long

long result;
public long addTwoNumbers(int first, int second)
{
    result = (long)first + second;
    return result;
}
注意只说
result=first+second
,因为将添加两个
int
,从而产生
int
(可能会溢出),然后才会转换为
long


result=(长)第一+第二
相当于
结果=((长)第一)+第二
(不是
result=(long)(first+second);
),这意味着我们首先将
int
中的一个转换为
long
,因此它将是
long+int
,这将给出
long

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

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

公共类计算器{public int addTwoNumbers(int first,int second){int result=first+second;返回结果;}}它将在我的回答范围内修复该类。将结果作为字段有好处,这就是计算器的工作方式。正确的修复方法是同步access.public类计算器{public long addtworumbers(int-first,int-second){long result=first+second;return result;}}这将有相同的问题-将两个int相加,得到一个int(可能溢出),然后才转换为long。太好了!我喜欢这个+这个问题很牵强。如果我想要一个长计算器呢?在采访中,这个问题是关于线程安全的。@Noofiz这并不牵强(如果有的话,可能的算术溢出问题没有得到足够的重视)。我同意这可能不是面试官想要的,但简单地提一下(以及线程问题)只会帮助你获得这份工作的机会。