这段代码在Java中是否安全?
public class HelloWorld {
public static void main (String args[]) {
HelloWorld h = new HelloWorld();
int y = h.getNumber(5);
int z = h.getNumber (6);
if (y == 10)
System.out.println("true");
}
public int getNumber(int x) {
int number = 5;
number = number + x;
return number;
}
}
我的同事说,int号将被放置在堆栈上,当getNumber返回时,它将被弹出并可能被覆盖。
C中相同的代码是否可能不安全?
答案 0 :(得分:0)
HelloWorld
类没有字段,因此是不可变的。您可以使用相同的对象从任何线程中多次调用getNumber(x)
函数,并且它将始终为同一参数提供相同的结果。
也许你的同事正在回忆C中的恐怖故事,你可以在其中找到类似static int number
的东西,其中"属于"该方法将被覆盖。或者也许她正在思考"通过引用返回&#34 ;;即使它是,你每次都会引用一个全新的对象,因为number
是为每个方法调用新实例化的。
答案 1 :(得分:-2)
你的同事是正确的,但他们显然误解了正在发生的事情。
public int getNumber(int x) {
int number = 5;
number = number + x;
return number;
}
是5 + 5或5 + 6的值将被放置在堆栈上,但是没有被覆盖的危险,它们将被正确地放入y或z中。
我怀疑混淆来自C(这种类型的代码在C中运行良好),但对于指针而不是基元。从C中的函数返回malloc的结果可以是"挑战"如果你做得不对。