Ⅰ java變數存儲問題
我對你看到的這個東西很不認同啊,Java里對int類型是傳值i的,你定義了兩個不同的int類型變數a和b那麼它們就是毫無關系的,應該是不同的兩個地址才對。
憑我對編譯原理的理解,我覺得Java和C什麼的一樣,對局部變數是這樣處理的:
程序在編譯的時候就會給變數分配其在棧中的位置。舉個例子:
int a = 3; int b = 3;
int c = a + 1;
假設編譯時給a分配的地址是「棧底+8」,b的地址是「棧底+12」,c的地址是「棧底+16」,那麼這一段代碼編譯後變成:
mov 8(%ebp), 3
mov 12(%ebp), 3
add 16(%ebp), 8(%ebp), 1
也就是說編譯之後,程序里就沒有a、b這些東西了,直接通過地址來進行運算。
如果我上面的理解沒有問題,那麼對你的問題的回答是:
1)不用找。
2)不會改變,這個地址在編譯時就分配好了。
3)我認為函數傳參的時候對基本類型還是傳值的,即會把基本類型的參數的值復制一份放到被調用函數的棧中;對於類變數才是直接扔進去一個地址。不過我不是很確定。
後補充的那一問,沒錯我同意你的看法。
Ⅱ java中定義一個保存float類型變數的值並初始化,求該數組中的最大值,並輸出
//為甚麼在復這不能粘貼,非要要我重新制敲
import java.util.*
public class Test{
public static void main(String args[]){
Scanner s=new Scanner(System.in);
float arr[]=new float [];//你沒說幾個數,我就寫了五個
System.out.println("輸入五個浮點數");
for(int i=0;i<5;i++){
arr[i]=s.nextFloat();
}
Arrays.sort(arr);//從打到小排序
System.out.println(arr[arr.length-1]);//輸出最後一個,最大的
}
}
Ⅲ java在循環語句的執行語句賦予變數值循環結束後會釋放嗎
在 java 中辯轎,在循環語句的執行語句中賦予變數值的操作不會導致變數被釋放。
Java 中的變數在被聲明後,會在內存中分配一塊存儲空間,並保存該變數的值。在執行循環語句時,變數值會被重復賦值,但是它的存儲空間並不會被釋放。
當循悄清環結束後,變數的值可能會發生變化,但是變數本身的存儲空間並不會被釋放。它只有在程序執行結束後,Java 虛擬機才會清理啟灶前內存並釋放相關資源。
因此,在 java 中,在循環語句的執行語句中賦予變數值的操作不會導致變數被釋放。
再試一次重新路由