java 传值传引用

java 传值传引用

  1. 值传递:传递的只是值的地址(副本),方法中对副本进行修改,不会影响调用方。
  2. 引用传递:传递的是引用的副本,方法中更改属性值会影响此地址中的数值。此时形参和实参是同一个内存地址。
  3. 空指针异常:访问一个对象的属性或方法,出现对象值为null。只有地址,地址中没有属性值,故为空指针。

例子

public class Main {
 
 public void changeInt(int age) {
  age = 20;
 }

 public void changeObj(User user) {
  user.age = 30;
  
 }
 
 
 public static void main(String[] args) {
  //创建一个Main的对象
  Main m = new Main();
  //创建一个User对象
  User u = new User();
  u.age = 10;
  
  m.changeInt(u.age);
  System.out.println(u.age); //输出结果:10
  m.changeObj(u);
  
  System.out.println(u.age);///输出结果:30

主方法中u.age中确定了10,第一个输出调用u.age的地址(传引用),于是结果为10;第二个输出语句传值,u在之前已经声明为30故输出为30。
在这里插入图片描述
下面针对String型数据的传值传引用进行探讨。

public static void main(String[] args){
  Main a =new Main();
  User u=new User();
  u.a="abc";
  u.b="abc";
  u.c="a"+"b"+"c";
  u.d="ab";
  u.e="d"+"c";
  String f=new String("abc");
  
  System.out.println(u.a);
  System.out.println(u.b);
  System.out.println(u.c);
  System.out.println(u.d);
  System.out.println(u.e);
  System.out.println(u.f);

输出结果
在这里插入图片描述

总结:

基本类型(byte,short,int,long,double,float,char,boolean)为传值;对象类型(Object,数组,容器)为传引用;String、Integer、Double等immutable类型因为类的变量设为final属性,无法被修改,只能重新赋值或生成对象。当Integer作为方法参数传递时,对其赋值会导致原有的引用被指向了方法内的栈地址,失去原有的的地址指向,所以对赋值后的Integer做任何操作都不会影响原有值。
————————————————
版权声明:本文为CSDN博主「编码小农」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36759405/article/details/82764339

参考链接:Java 传值和传引用的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值