Java中值传递和引用传递原理以及区别
Java在參數(shù)傳遞時(shí)有兩種:一種是按值傳遞,一種是按引用傳遞
值傳遞:值傳遞是指在調(diào)用方法時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到方法中,也就是說,在調(diào)用方法時(shí),實(shí)際參數(shù)把他的值的副本傳遞給對(duì)應(yīng)的形式參數(shù)。(注意這里說的是值)更簡(jiǎn)單來說,就是直接復(fù)制了一份數(shù)據(jù)過去,此時(shí),內(nèi)存中應(yīng)該是存在兩個(gè)相等的基本類型,后面方法中的操作都是對(duì)這個(gè)形參(副本)進(jìn)行修改,不會(huì)影響到實(shí)際參數(shù)的值,但是值傳遞也有缺點(diǎn):因?yàn)槭侵苯訌?fù)制,所以這種方式在傳遞數(shù)據(jù)量非常大的時(shí)候,運(yùn)行效率自然就會(huì)降低,所以Java在傳遞數(shù)據(jù)量很小的數(shù)據(jù)的時(shí)候是值傳遞,比如Java中的各種基本類型:float,double,int等類型。
引用傳遞:引用傳遞就彌補(bǔ)了上面的不足,在調(diào)用方法時(shí),實(shí)際參數(shù)的引用(地址,而不是參數(shù)的值)被傳遞給相應(yīng)的形式參數(shù),也就是說引用傳遞時(shí),操作的都是源數(shù)據(jù),在方法執(zhí)行中,形參和實(shí)參內(nèi)容相同,指的是同一塊地址值,方法執(zhí)行中對(duì)引用的操作將會(huì)影響到實(shí)際對(duì)象 ?比如Object ?List 二維數(shù)組 Map等除了基本類型的都是引用傳遞
//值傳遞舉例public class ValuePass {public static void main(String[] args) {ValuePass valuePass = new ValuePass();int param=20;valuePass.setParam(param);System.out.println("值傳遞參數(shù)"+param);}public void setParam(int a) {a=a+10;System.out.println("值傳遞參數(shù)"+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;}}運(yùn)行結(jié)果: 值傳遞參數(shù)30 值傳遞參數(shù)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;} }運(yùn)行結(jié)果: 引用傳遞前===========小橘子18女 賦值===========大西瓜80男 引用傳遞后===========大西瓜80男 May everyone be happy every day and everything go well!總結(jié)
以上是生活随笔為你收集整理的Java中值传递和引用传递原理以及区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用windowManager实现音乐播
- 下一篇: 浅谈Handler机制