Java中值传递和引用传递原理以及区别
生活随笔
收集整理的這篇文章主要介紹了
Java中值传递和引用传递原理以及区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java在參數傳遞時有兩種:一種是按值傳遞,一種是按引用傳遞
值傳遞:值傳遞是指在調用方法時將實際參數復制一份傳遞到方法中,也就是說,在調用方法時,實際參數把他的值的副本傳遞給對應的形式參數。(注意這里說的是值)更簡單來說,就是直接復制了一份數據過去,此時,內存中應該是存在兩個相等的基本類型,后面方法中的操作都是對這個形參(副本)進行修改,不會影響到實際參數的值,但是值傳遞也有缺點:因為是直接復制,所以這種方式在傳遞數據量非常大的時候,運行效率自然就會降低,所以Java在傳遞數據量很小的數據的時候是值傳遞,比如Java中的各種基本類型:float,double,int等類型。
引用傳遞:引用傳遞就彌補了上面的不足,在調用方法時,實際參數的引用(地址,而不是參數的值)被傳遞給相應的形式參數,也就是說引用傳遞時,操作的都是源數據,在方法執行中,形參和實參內容相同,指的是同一塊地址值,方法執行中對引用的操作將會影響到實際對象 ?比如Object ?List 二維數組 Map等除了基本類型的都是引用傳遞
//值傳遞舉例public class ValuePass {public static void main(String[] args) {ValuePass valuePass = new ValuePass();int param=20;valuePass.setParam(param);System.out.println("值傳遞參數"+param);}public void setParam(int a) {a=a+10;System.out.println("值傳遞參數"+a); }public void setValue(IntValue source) {source.setValue(40);System.out.println("賦值"+source.getValue());}} class IntValue{public int value;public IntValue(int source) {value=source;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}}運行結果: 值傳遞參數30 值傳遞參數20 //引用傳遞舉例: public class ValuePass {public static void main(String[] args) {User user = new User("小橘子",18,"女");System.out.println("引用傳遞前"+"==========="+user.getName()+user.getAge()+user.getSex());setValue(user);System.out.println("引用傳遞后"+"==========="+user.getName()+user.getAge()+user.getSex());} public static void setValue(User user) {user.setName("大西瓜");user.setAge(80);user.setSex("男");System.out.println("賦值"+"==========="+user.getName()+user.getAge()+user.getSex());}} class User{public String name1;public int age1;public String sex1;public User(String name,int age,String sex) {name1=name;age1=age;sex1=sex;}public String getName() {return name1;}public void setName(String name) {this.name1 = name;}public int getAge() {return age1;}public void setAge(int age) {this.age1 = age;}public String getSex() {return sex1;}public void setSex(String sex) {this.sex1 = sex;} }運行結果: 引用傳遞前===========小橘子18女 賦值===========大西瓜80男 引用傳遞后===========大西瓜80男 May everyone be happy every day and everything go well!總結
以上是生活随笔為你收集整理的Java中值传递和引用传递原理以及区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用windowManager实现音乐播
- 下一篇: java美元兑换,(Java实现) 美元