![](/img/trans.png)
[英]Java Scope: Returning an object instantiated inside a method - Is it dangerous?
[英]Scope of variable instantiated inside a method - Java
此代碼在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語言中可能不安全嗎?
HelloWorld
類沒有字段,因此是不可變的。 您可以使用相同的對象從任意線程中多次調用getNumber(x)
函數,並且對於相同的參數,它將始終提供相同的結果。
也許您的同事正在回想起C語言中的恐怖故事,您可以在其中得到一些像static int number
這樣的東西,它“屬於”該方法,並且將被覆蓋。 或者,也許她正在考慮“參考歸還”; 即使是這樣,您也會每次都引用一個全新的對象,因為對於每個方法調用, number
都是新實例化的。
您的同事是正確的,但是,他們顯然誤解了正在發生的事情。
public int getNumber(int x) {
int number = 5;
number = number + x;
return number;
}
是的,將5 + 5或5 + 6的值放在堆棧上,但是不存在覆蓋它們的危險,可以將它們正確地放在y或z中。
我懷疑混淆來自C(這種類型的代碼在C中也能正常工作),但是對於指針而不是基元。 如果操作不正確,從C中的函數返回malloc的結果可能會“具有挑戰性”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.