这篇文章主要介绍了java基本数据类型传递与引用传递区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 java中方法参数传递方式是按值传递。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。
java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题,首先我们必须认识到这个问题一般是相对函数而言的,也就是java中的方法参数,那么我们先来回顾一下在程序设计语言中有关参数传递给方法(或函数)的两个专业术语:
按值调用(call by value)
按引用调用(call by reference)
所谓的按值调用表示方法接收的是调用着提供的值,而按引用调用则表示方法接收的是调用者提供的变量地址(如果是c语言的话来说就是指针啦,当然java并没有指针的概念)。这里我们需要注意的是一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值,这句话相当重要,这是按值调用与引用调用的根本区别,当然如果还不理解,没关系,下面就要图文并茂的彻底分析啦。
前面我们说过java中并不存在引用调用,这点是没错的,因为java程序设计语言确实是采用了按值调用,即call by value。也就是说方法得到的是所有参数值的一个拷贝,方法并不能修改传递给它的任何参数变量的内容。下面我们来看一个例子:
package com.zejian.test;
/**
* java中的按值调用
* @author zejian
*/
public class callbyvalue {
private static int x=10;
public static void updatevalue(int value){
value = 3 * value;
}
public static void main(string[] args) {
system.out.println("调用前x的值:"+x);
updatevalue(x);
system.out.println("调用后x的值:"+x);
}
package com.zejian.test;
public class user {
private string name;
private int age;
public user(string name, int age) {
this.name=name;
this.age=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;
}
执行类如下:
package com.zejian.test;
/**
* java中的按值调用
* @author zejian
*/
public class callbyvalue {
private static user user=null;
public static void updateuser(user student){
student.setname("lishen");
student.setage(18);
}
public static void main(string[] args) {
user = new user("zhangsan",26);
system.out.println("调用前user的值:"+user.tostring());
updateuser(user);
system.out.println("调用后user的值:"+user.tostring());
}
package com.zejian.test;
/**
* java中的按值调用
* @author zejian
*/
public class callbyvalue {
private static user user=null;
private static user stu=null;
/**
* 交换两个对象
* @param x
* @param y
*/
public static void swap(user x,user y){
user temp =x;
x=y;
y=temp;
}
public static void main(string[] args) {
user = new user("user",26);
stu = new user("stu",18);
system.out.println("调用前user的值:"+user.tostring());
system.out.println("调用前stu的值:"+stu.tostring());
swap(user,stu);
system.out.println("调用后user的值:"+user.tostring());
system.out.println("调用后stu的值:"+stu.tostring());
}
}