Java數組當參數傳遞
Ⅰ java里數組如何作為參數傳遞給方法,以及如何在方法中返回數組
定義方法的時候可以在參數列表中定義傳入參數的類型 例如
void method( int[] a)
或者使用可變參數
void method(object…obj)
而方法的返回值在方法內使用return定義 同時方法定義中的返回值類型也要同 return後的數據類型一致
例如
public int[] method(){
//代碼塊…
return 數組名;
}
希望能幫到你
Ⅱ java數組作為參數傳入函數怎麼讓他不變化
您不能使數組的元素不變。但是方法中也可用來傳遞和返回數組。如果要向方法中傳遞一個數組,則方法的接收參數處必須是符合其類型的數組。而且數組屬於引用數據類型,所以在把數組傳遞進方法之後,如果方法對數組本身做了任何修改,修改結果都是會保存下來的。
向方法中傳遞棗扮穗數組
在java中,所有對象都是通過引用進行操作的。而數組缺氏也是一種對象,當把數組作為參數傳遞給方法時,傳遞的實際上就是數組對象的引用。在方法中對數組的所有操作,都會映射到原數組中。而所謂的"引用",就是java對象在堆內存的地址賦給了多個"棧內存"的變數既然方法可以接收一個數組,那麼方法也就可以返回一個數組,則此時,只需要在返回值類型聲明處明確的寫出返回的數組類型即可。
數組可以作為方法的參數。
當調用方法的時候,向方法的小括弧進行傳參,傳遞進去的其實是數組的地址值返回值類型:只是進行列印而已,不需要進行計算,也沒有結果,用void
但是java.util.Collections類的unmodifiableList()方法接受List介面的一個對象(實現其類的對象),並返回給定對象的不可修改形式。用戶僅對獲得的列表具有隻讀訪問許可權。
ArrayList類的asList()方法接受一個數組並返回一個List對象。
因此,要轉換一個不可變的數組-獲得所需的數組。
使用asList()方法將其轉換為列表對象。首先給出結論:Java 程序設計語言對對象採用的不是引用調用,實際上,對象引用是按值傳遞的。(出自java核心技術卷一,第4章對象與類)
在刷leetcode時看到這樣一道題:
給你一個有序數組 nums ,請你 原地 刪除重復出現的元素,使每個元素 只出現一次 ,返回刪除後數組的新長度。
不要使用額外的數組空間,你必須在 原地 修改輸入數組 並在使用 O(1) 額外空間的條件下完成。在編程語言中調用函數時的參數傳遞分為值傳遞和引用傳遞,在學習Java的時候一般會見過這樣一句話:基本數據類型使用值傳遞、對象使用引用傳遞。
對於值傳遞自然好說,傳入方法的是變數的值,擁有可變參數的方法可以被重載,在調用方法的時候,如果能夠和固定參數的方法匹配,也能夠與可變長參數的方法匹配,則選擇固定參數的方法。一凳卜個方法只能有一個可變長參數,並且這個可變長參數必須是該方法的最後一個參數編譯器雖然知道怎麼調用,但人容易陷入調用的陷阱及誤區第一個能編譯通過,這是為什麼呢?事實上,base對象把子類對象sub做了向上轉型,形參列表是由父類決定的,當然能通過。再看看子類直接調用的情況,這時編譯器看到子類覆寫了父類的print方法,因此肯定使用子類重新定義的print方法,盡管參數列表不匹配也不會跑到父類再去匹配下,因為找到了就不再找了,因此有了類型不匹配的錯誤。
這是個特例,重寫的方法參數列表與父類不相同,這違背了重寫的定義,並且會引發莫名其妙的錯誤。在這里,我們再復習下重寫必須滿足的條件:
1)重寫方法不能縮小訪問許可權;
2)參數列表必須與被重寫方法相同(包括顯示形式);
3)返回類型必須與被重寫方法的相同或是其子類;
4)重寫方法不能拋出新的異常,或者超過了父類范圍的異常,但是可以拋出更少、更有限的異常,或者不拋出異常。
Ⅲ java數組參數如何傳遞
int型的數據是一個常量,存在於一個常量池中,當修改池中的值時,如果產生的新值,在原池中沒有這個值,就會在池中創建一個新的。其實以上過程又創建了新的常量。
java中對於數組,是當作一個對象來看待的,你傳遞的是一個引用,也就是內存地址,在這個過程中,只存在一個對象,並沒有創建新的對象,所有修改的只是這一個對象。
以上純屬我的個人理解。
Ⅳ java 字元串數組作為參數傳遞結果未初始化
我明白你的意思。你是說result這個數組作為參數傳遞進去,在執行Converse方法後為啥還是null對嗎。其實是這樣。引用傳遞沒錯。但是你忘記了一件事。String [] result沒有初始化,那麼其實String [] result = null;所有成員變數會默認初始化,只不過引用型默認為null。這樣一來,result=null。相當於你在Converse(input,result)時傳了null進去。這時,pOutput=result ,即pOutput=null,執行這一句pOutput = wordArray.split(" ")後pOutput指向了一個String[]對象不為null了,但是方法結束後pOutput就彈棧了就死了而result還指向null;因此當該方法結束後result還是null。
Ⅳ Java的數組作為參數傳入方法和C語言的不同
首先,數組名不是指針,只不過作為參數或返回值時會退化為指針,其次,java 使用值傳參(pass_by_value)的方式來傳遞函數參數,只是值傳遞方式在處理原始數據類型參數與引用類型參數時候有不同,如果一個參數是原始數據類型,那麼參數變數的值傳遞進去,如果要修改,需要傳遞引用類型
Ⅵ java類中用類的數組作為函數參數傳給類,為什麼不能直接對類的數組進行操作
你說不行的代碼段,關鍵在這:(簡稱為代碼①)
Student stu[] = new Student[5];
Admin a = new Admin();
a.wyx(stu);
以及調用的時候:(簡稱為代碼②)
public void wyx(Student stu[])
{
Scanner in = new Scanner(System.in);
String name = in.nextLine();
stu[0].setName(name);
System.out.println(stu[0].getName());
}
而後面你說可以的方法是這樣的(簡稱為代碼③)
public void wyx(Student stu[])
{
Scanner in = new Scanner(System.in);
String name = in.nextLine();
Student stud = new Student();
stud.setName(name);
stu[0] = stud;
System.out.println(stu[0].getName());
}
為什麼不可以?這里你首先要清楚你在wyx方法里用到的形參是一個Student對象的數組,在代碼②中,你直接使用stu[0].setName(name);,那麼要想取得它的前提就是你的下標0有存在的對象,也就是你必須在你代碼①里給你的stu 對象的0下標賦值,也就是:
stu[0] = new Student();
否則你只是給數組開辟了大小,但並未在相應的位置給定實例化的對象,那麼你在代碼段②敏宴里直接引用是引用到空指針鉛拿桐上的,並不存在對象。恰好你在代碼①中就只是使用了
Student stu[] = new Student[5];
並沒有對數組里的做對象的初始化,所有你這個代碼運行時會出錯。
代碼段③里,就恰恰符合上面所說,你創建一個新的對象:
Student stud = new Student();
再給它賦值了name,最後把這個對象給了stu數組對象的0下標
stu[0] = stud;
這樣你的stu[0]具有正確的對象引用,你在後面的輸出中調用它就正常了。
如果說你要前面方法可用,改為下面方式:
public class 類對類的操作 {
public static void main(String[] args)
{
Student stu[] = new Student[5];stu[0] = new Student(); -- 這里創建一個新的Student實例,並讓stu[0]引用,只槐坦是根據你後面方法只引用了stu[0]
Admin a = new Admin();
a.wyx(stu);
}
}
另外有一些簡單的建議:
你的代碼段里對數組的寫法使用的是Student stu[],那麼比較建議的寫法是Student[] stu;
如果你真的要傳遞Student stu[] = new Student[5];,那麼有兩種建議:
① 你給你的數組對象先實例化好,可以用循環,如果沒學到循環,可以一個一個創建;
② 如果不想在創建時候就實例化,那麼也可以在使用的時候進行判斷,判斷如果是空引用,不包含對象再進行實例化,關鍵代碼如下:
if (null == stu[0]) {
stu[0] = new Student();
}
Ⅶ JAVA程序中數組傳遞給參數的問題,【代碼1】【代碼2】如何填寫!
占個位置。。。。
希望選我為最佳答案,謝謝!!!
可根據提示,將對應內容填入即可
第一個地方:computer調用average(double x[])方法,將數組a傳遞給參數x
填入:computer.average(a);
第二個地方:computer調用average(double x[])方法,將數組b傳遞給參數x
填入:computer.average(b);
說明:
就是調用類下的方法,傳入說明的中參數,就可以返回需要的值!
Ⅷ java中 數組可以作為形式參數傳遞到調用的方法中嗎要怎麼操作
可以,操作代碼如下:
public class ArrTest{
public static void doTest(String[] args){
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
public static void main(String[] args){
String[] testArr = {"a","b","c","d"};
ArrTest.doTest(testArr );
}
}
(8)Java數組當參數傳遞擴展閱讀:
把數組作為參數傳入一個方法,在該方法中對數組進行一些操作:如果僅僅是插入數據項等一般操作,那麼該操作會影響到數組本身;反之,如調整數組大小、對數組賦值等操作,則對數組本身沒有影響。
例子:
public class Tester {<br data-filtered="filtered">
public static void counter(int count) {<br data-filtered="filtered">
count = 2;<br data-filtered="filtered">
}<br data-filtered="filtered">
<br data-filtered="filtered">
public static void changeA1(int[] ints) {<br data-filtered="filtered">
int[] temp = { 4, 5, 6 };<br data-filtered="filtered">
ints = temp;<br data-filtered="filtered">
}<br data-filtered="filtered">
<br data-filtered="filtered">
public static void changeA2(int[] ints) {<br data-filtered="filtered">
ints[0] = 4;<br data-filtered="filtered">
ints[1] = 5;<br data-filtered="filtered">
ints[2] = 6;<br data-filtered="filtered">
}<br data-filtered="filtered">
<br data-filtered="filtered">
public static void main(String[] args) {<br data-filtered="filtered">
// Output: 1<br data-filtered="filtered">
// 基本數據類型沒有改變。<br data-filtered="filtered">
int count = 1;<br data-filtered="filtered">
counter(count);<br data-filtered="filtered">
System.out.println("count: " + count);<br data-filtered="filtered">
<br data-filtered="filtered">
<br data-filtered="filtered">
int[] ints = { 1, 2, 3 };<br data-filtered="filtered">
<br data-filtered="filtered">
// Output: 1, 2, 3<br data-filtered="filtered">
// 對數組賦值,不會改變原始數組。<br data-filtered="filtered">
changeA1(ints);<br data-filtered="filtered">
for (int i = 0; i < ints.length; i++) {<br data-filtered="filtered">
System.out.print(ints[i] + " ");<br data-filtered="filtered">
}<br data-filtered="filtered">
<br data-filtered="filtered">
// Output: 4, 5, 6<br data-filtered="filtered">
// 可以對數組插入新的數據項。<br data-filtered="filtered">
System.out.println();<br data-filtered="filtered">
changeA2(ints);<br data-filtered="filtered">
for (int i = 0; i < ints.length; i++) {<br data-filtered="filtered">
System.out.print(ints[i] + " ");<br data-filtered="filtered">
}<br data-filtered="filtered">
}<br data-filtered="filtered">
}
Ⅸ java 函數參數是數組的時候傳遞的是值還是引用如果想讓他傳遞數組的
應該是傳值的,參考如下內容:
被當作參數傳入的變數仍然保持了原來的值不變。如果我們把傳入的int型變數改為Object型也是纖此一樣的鎮豎睜,因為Java通御歲過傳值來傳遞引用的