JAVA数据类型和参数传递方式的关系

在JAVA当中,参数的传递分为“按值传递”和“按引用传递”。

      之前的博客有提到过。JAVA分为基本数据类型和引用数据类型,两者在底层表现为“栈”和“堆”的关系,原因可以简单理解为基本类型内容放“栈”上。引用类型内容才可以放“堆”上,“栈”上只有它的一份地址引用。我们平时操作的都是“栈”,而想操作“堆”,就得实例化(实例化会为你创建堆空间)。

     为什么我会联想到数据类型呢?

首先理解按值传递和按引用传递是什么。

按值传递是什么,按值传递指的是在方法调用时,传递的参数是按值的拷贝传递。示例如下:

public class TempTest {
private void test1(int a){
//做点事情
}
public static void main(String[] args) {
TempTest t = new TempTest();
int a = 3;
t.test1(a);//这里传递的参数a就是按值传递
}
}

按值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了。

示例如下:

public class TempTest {
private void test1(int a){
a = 5;
System.out.println("test1方法中的a="+a);
}
public static void main(String[] args) {
TempTest t = new TempTest();
int a = 3;
t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a
System.out.println(”main方法中的a=”+a);
}
}
运行结果是:
test1方法中的a=5
main方法中的a=3

为什么,因为a是值类型!


按引用传递是什么,指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。

示例如下:

public class TempTest {
private void test1(A a){
}
public static void main(String[] args) {
TempTest t = new TempTest();
A a = new A();
t.test1(a); //这里传递的参数a就是按引用传递
}
}
class A{
public int age = 0;
}

按引用传递的重要特点:

传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。

示例如下:


 public class TempTest {
 private void test1(A a){
 a.age = 20;
 System.out.println("test1方法中的age="+a.age);
 }
 public static void main(String[] args) {
 TempTest t = new TempTest();
 A a = new A();
 a.age = 10;
 t.test1(a);
 System.out.println(”main方法中的age=”+a.age);
 }
 }
 class A{
 public int age = 0;
 }

运行结果如下:

test1方法中的age=20
main方法中的age=20

JAVA使用按值传递的函数调用方式,它并不希望在函数当中对参数进行修改,这会混淆该参数的自身行为。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值