JAVA的值传递
来源:互联网 发布:无线访客网络设置 编辑:程序博客网 时间:2024/06/06 01:03
这里讲讲JAVA中的值传递和所谓的引用传递还有两个特殊的String和null,因为当时在这里曾经被误导很多次,所以来分享下自己的想法
我们先来讲讲值传递吧,一般针对基本数据类型我们把他称之为值传递。
我们定义一个类A
class A{
public void show(int a){
//定义一个show方法,需要传入一个int型参数,这里为什么我没说传入a,其实这里很多人会被误导,方法里面的int a其实无关紧要,他可以叫b,叫c都可以,其实取叫为a就是误导你的。
a=3;
System.out.println("show中a = "+a);
}
public static void main(String[]args){
A Objecta = new A();
int a =2;//这里我们定义了一个整形a,并初始化赋值为2
Objecta.show(2);//把2传入
System.out.println("main中a="+a);//打印a值
}
}
上述结果会依次打印 show中a=3 main中a=2
这里a中的值并没有发生变化,这个是为什么呢。
因为他传的时候传的不是a,而是他的一个副本,你改变的是他副本的值,而这个副本的生命周期只存在于方法中,方法调用结束,他就被销毁了。
引用传递---->其实我也认同java没有引用传递这种说法,也就是说java只有值传递,为什么这么说呢?
因为java没有指针的说法却有他的概念,那就是地址,引用传递说明我们传的是引用是地址,地址也是常量,那就说明我们依然是值传递,只是传的是地址,也就是引用而已。
首先我们来看个图
图画的比较差,意思看下例就懂了
class B{
public void show(int arr1[]){
//这里形参arr1[]的名字可是可以随便取的
arr1[0]=17;
System.out.println("show中arr[0] = "+arr[0]);
}
public static void main(String[]args){
B Objectb = new B();
int arr1 =new int[]{14,15,16};//这里我们定义了一个整形数组arr1,并初始化赋值为2
Objecta.show(arr1);//把数组传入
System.out.println("main中arr1[0]="+arr1[0]);//打印a值
}
}
两个结果都会打印17,因为引用传递传递的是地址,如果绿色箭头引用把arr1[0]的值改了,由于绿色和蓝色是引用的是一个地方,对蓝色来说地址是不会,但是里面存放的东西变了,所以看出来的效果蓝色原arr1[0]已经被改变了
但是这里有两个特例:
一个是null类型,如果你传入的对象是一个null类型,什么意思呢,就是说我先创建一个对象赋值为Null,把这个对象传入方法,不管你在方法里面做什么操作,返回的都是null而且必报NullPointerException
第二个就是String类型了
这个我就不画图了
String不是引用类型吗,为什么效果和基本数据类型一样呢?
因为我们要记住,new的String的定义是这样子的他是定义后就不可更改的类型,内存分配空间就只有这么大。如果你对他进行拼接,拆取等操作,其实他是重新开辟了一个内存空间赋值而已,所以这里从侧面也看出了String拼接字符串相比StringBuilder或者StringBuffered占内存大。(PS:StringBuilder和StringBuffered是在原内存基础上加减,所以内存开销要小)也就是说这里其实是重新创建了String对象指向a(PS:用hashcode证明我感觉不妥当,差不多就是那个意思)
感觉写的不够详细,有的地方逻辑不严谨,望指正,共同学习
0 0
- java的值传递
- Java的值传递
- Java的值传递
- Java的值传递
- JAVA的值传递
- 值传递的Java
- java的值传递还是引用传递
- Java的值传递与引用传递
- Java的值传递和引用传递
- java的值传递与引用传递
- java的引用传递和值传递
- java的引用传递和值传递
- java的值传递与引用传递
- java的值传递,没有引用传递
- Java的引用传递和值传递
- java的值传递和引用传递
- java的值传递和引用传递
- JAVA的值传递与参数传递
- vi使用方法详细介绍
- 数据结构课程总结,,
- restful接口实现跨域访问,以及get请求对象参数对象封装,post请求
- UUID笔记
- matlab---RBF
- JAVA的值传递
- 【数据结构&算法】二叉树的层序遍历
- 浅析android消息收发机制
- 同源策略 & 内容安全策略
- 【AJAX】XMLHttpRequest
- 推荐系统 用户画像 标签聚类 个性化搜索
- 数据库之视图操作
- 1619-7 张良 十二月十八号总结 [连续第七十九天]
- 《React-Native系列》图解RN布局之FlexBox