java基础,但非常重要的.引用传递和值传递见解

之前没有写过博客,因为一直觉得没什么好写的.这两天对对象引用的理解又更深了一些,这个是基本的知识,但是确实比较重要.相信大多数程序员都知道,引用传递和值传递,但可能没有深入分析过或不是太清楚.包括在这之前的我,也觉得自己已经掌握得可以了.到现在为止,我每一次都又觉得又理解得更深一些了,这就是不断学习和理解的过程.今天就分享一下我自己的理解.如果有说得不对的地方,大神勿P.


很多人说的JAVA是没有引用传递的,只有值传递,今天我不讨论这个问题.我只说明在实现代码中.哪些是值传递,哪些是引用对象传递.而又有什么不同点.


首先,传入一个方法中,如果接收的是基本数据类型,则肯定是值传递,那么值传递有什么影响呢?按我的基本理解就是,在方法内部改变了该参数的值,并不会影响到外部的实参.


1.1 传入基本数据类型参数

public static void main(String[] args){

int a = 3;

add(a);

System.out.println("方法外部A = "+a);

}


public static void add(int a){

a = 10;

System.out.println("内部方法A = "+a);

}


上述程序运行后,结果是:内部方法A = 10

外部方法A = 3

说明值传递后,值改变是没有影响的.因为只是传了一个值的过去.值传递基本上就是这样子的.是不是很简单.下面重点来看一看引用传递(地址传递)


引用传递也叫做地址传递,为什么叫地址传递.因为本身就是传递的对象在内存中的地址.


按我的理解,如果传入到方法中的参数是对象或数组,那么你就可以理解为是引用传递了.那么它有什么特点呢,特点就是在方法内部改变了该对象中的属性值,

外部对象同样也会发生改变(当然String类除外).注意,一定是改变了对象的属性值,而不是对该对象本身赋值.


2.1


public static void main(String[] args){

Map<String,Integer> m = new HashMap<String,Integer>();

m.put("aaa",12);

update(m);

System.out.println("外部MAP = "+m);

}


public static void update(Map<String,Integer> m){

m.put("aaa",-1);

System.out.println("内部MAP = "+m);

}


这时候结果是都是打印的:MAP = {aaa=-1}为什么呢,我们来看一张图.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值