日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 方法传参

發布時間:2024/4/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 方法传参 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是小弟的第一篇博客,寫得不好還請看官見諒哈!

java 有兩種數據類型:基本數據類型(int,short,long,byte,float,double,boolean,char),引用數據類型(基本數據類型之外的數組,String,對象等等)。

在方法中傳參數有兩種方式:值傳遞和引用傳遞

先看下面的一個實例。

public class Stu { String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }public class Test {protected static void updateStu(Stu stu) { stu.setAge(5); stu.setName("Li"); //stu=new Stu(); //stu.setAge(5); //stu.setName("Li"); //用上面注釋的代碼替換掉未注釋,修改前后的stu是一樣的,即3,zhang } protected static void updateStr(String str) { str=new String("update"); //str="update"; //這兩行代碼效果一樣 } protected static void updateInteger(Integer i) { i=10; } protected static void updateBasic(int i) { i=10; } protected static void updateArray(int[] test) { if(test.length>1) test[0]=10; } protected static void updateCharArray(char[] cs) { cs=new char[3]; cs[0]='a'; cs[1]='b'; cs[2]='c'; } public static void main(String[] args) { Stu stu=new Stu(); stu.setAge(3); stu.setName("Zhang"); System.out.println("1-----------當方法參數為普通對象"); System.out.println("初始值"); System.out.println(stu.getAge()); System.out.println(stu.getName()); updateStu(stu); System.out.println("修改后"); System.out.println(stu.getAge()); System.out.println(stu.getName()); System.out.println("2-----------當方法參數為String"); String str1=new String("haha"); String str2="hehe"; System.out.println("初始值"); System.out.println(str1); System.out.println(str2); updateStr(str1); updateStr(str2); System.out.println("修改后"); System.out.println(str1); System.out.println(str2); System.out.println("3-----------當方法參數為Integer"); Integer integer=new Integer(5); System.out.println("初始值"); System.out.println(integer); updateInteger(integer); System.out.println("修改后"); System.out.println(integer); System.out.println("4-----------當方法參數為八種基本類型"); int t=5; System.out.println("初始值"); System.out.println(t); updateBasic(t); System.out.println("修改后"); System.out.println(t); System.out.println("5-----------當方法參數為整數數組"); int[] test ={1,2,3}; System.out.println("初始值"); System.out.println(test[0]+"--"+test[1]+"--"+test[2]); updateArray(test); System.out.println("修改后"); System.out.println(test[0]+"--"+test[1]+"--"+test[2]); System.out.println("6-----------當方法參數為字符數組"); char[] cs ={'1','2','3'}; System.out.println("初始值"); System.out.println(cs); updateCharArray(cs); System.out.println("修改后"); System.out.println(cs); } }

?

=======================================輸出

1-----------當方法參數為普通對象
初始值
3
Zhang
修改后
5
Li
2-----------當方法參數為String
初始值
haha
hehe
修改后
haha
hehe
3-----------當方法參數為Integer
初始值
5
修改后
5
4-----------當方法參數為八種基本類型
初始值
5
修改后
5
5-----------當方法參數為整數數組
初始值
1--2--3
修改后
10--2--3
6-----------當方法參數為字符數組
初始值
123
修改后
123

?

根據上面的結果,可以得出這樣的結論

1、基本數據類型采用的是值傳遞,(類似C里面的傳值),它不會修改實參的值

2、引用數據類型采用的是引用傳遞,(類似C里面的傳指針),和值傳遞類似,傳的是引用的一份拷貝,而非引用本身(通過下面的例子證實),引用可以理解成JAVA的指針,它指向對象在堆里面分配的首地址。

3、String修改后為什么實參沒變,這個我看過很多文章說String就相當于是char[]的包裝類。包裝類的特質之一就是在對其值進行操作時會體現出其對應的基本類型的性質。

但是小弟有另一番理解:str="update",這句話會有有如下動作,在棧里面查找有沒有value="update"的String引用,要是有就將str指向堆里面的該地址,要是沒有就會重新創建一個String對象"update",并將str指向該對象在堆中的地址。在上面的實例中,調用updateStr方法,會將str的引用賦給形參str,而在這個方法中str又重新指向了另一個String對象,但是這個過程并沒有修改實參所指向的String對象,這個就和updateStu方法一樣,只要new了一個新的對象,那么實參指向的對象就不會改變。

?

public static void main(String[] args) throws Exception{Demo demo=new Demo(5);changeDemo(demo);System.out.println(demo.val);setDemo(demo);System.out.println(demo.val);}public static void changeDemo(Demo demo){demo=new Demo(6);}public static void setDemo(Demo demo){demo.setVal(6);}static class Demo{int val;Demo(int val){this.val=val;}public void setVal(int val){this.val=val;}}

輸出

5 6

從上面的例子可以看出setDemo將形參引用指向了一個新的對象,它的值是6,但是這個并沒有改變實參的值,說明函數傳遞的并非實參引用本身,而是實參引用的一份拷貝。

setValue,通過形參引用來改變實參的值,是因為,此時實參引用和形參引用指向的是同一對象。

轉載于:https://www.cnblogs.com/maydow/p/4460900.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java 方法传参的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。