java参数传值问题详解

最近复习了java的基础 发现了很多模棱两可的问题 特此记录

首先复习java的参数传递机制
1:基本类型或基本类型的包装类、String是值传递,引用类型是引用传递。
首先我们来看一下图文解析,要明白java的参数传递,首先我们要懂java的值存储的位置

java数据存储在栈区、堆区、常量池、(非人为可控,不做介绍)寄存器、非RAM存储区

对于值类型参数
java参数传递是传递参数的复制
而对于引用类型java传递的是对象的引用,对象的引用指向了堆区的对象实例,当我们通过引用调用堆区的对象,改变他的值时,指向该对象的所有引用都发生了变化

栈区:存储局部变量 对象的引用(每个线程初始化 都会建立一个栈区)
堆区:存储被用于的对象(唯一)
常量池:存储常量、String类型等(唯一)

先写一个最简单的例子

public static void main(args [])
{
	String s="1232";	
	change(s);
	System.out.print(s);	//s输出1232
}
public static void change(String s)
{
	s=s+"123";
	System.out.print(s);// s输出1232123
}


我们考虑java的参数传递 首先要考虑被传递参数存储的位置!!!
String是字符串类型 存储在常量池中,在change方法给s重新赋值时,实际上
主函数的s依旧指向"1232",而change()方法中的s重新复制,会生成一个新的字符串"1232123" 并把change()中的s指向它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值