java传递引用的问题,为什么传递后,test1方法对变量值的改变不影响这里的a

packagedzsfds1;publicclass传递引用1{privatevoidtest1(Stringa){a="s";System.out.println("t... package dzsfds1;
public class 传递引用1 {
private void test1(String a){
a = "s";
System.out.println("test1方法中的a="+a);
}
public static void main(String[] args) {
传递引用1 t = new 传递引用1();
String a = "v";
System.out.println(a);
t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a
System.out.println("main方法中的a="+a);
}
}
展开
 我来答
曾经有个怪叔叔
推荐于2016-09-07 · TA获得超过534个赞
知道小有建树答主
回答量:369
采纳率:100%
帮助的人:396万
展开全部
因为传递的是个数据类型,不是对象。

对象可以被方法改变(改变其中的属性等)

数据类型必须通过 等号“=” 来对内存进行改变

由于main中没有 对 a重新赋值(没有看到=),所以a不会改变

privat void test1(String a){
return "s";

}

public static void main(String[] args) {

String a = "v";

System.out.println(a);

a=test1(a);
System.out.println("main方法中的a="+a);

}

这样写就改变 main 中的 a 了,
另外,在同一个类中的方法调用时,可以不用 实例化 类。
就是 传递引用1 t = new 传递引用1(); 不用写
锐道
2025-09-24 广告
URule Pro Java 规则引擎,一款给业务人员使用的可视化商业决策规则引擎系统,打开浏览器即可开始设计业务规则;URule Pro是一款自主研发纯Java规则引擎,亦是一款国产智能风控决策引擎,可以运行在Windows、Linux、... 点击进入详情页
本回答由锐道提供
乔治_盛顿号
2015-04-10 · 超过14用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:14.5万
展开全部
因为你a定义的只是字符串常量,并不是一个引用类型,所以你只是传一个字符串过去而已,你
a = "s"只是赋值罢了或说定义了新的变量,并不改变原来a值。即使你传引用类型的参数,在test1方法若不在参数上操作,依旧让a = .XX 或 a = new XX()等他依旧不会改变原来的值。
追问
只能一个采纳...没办法。
能问一下怎么在test1方法的参数上做操作?
是操作形参还是实参(我这么问可能不对。。。)?
追答

我画个图你就明白了,其实不论是实参还是形参,这里都是操作他们指向的字符窜。其他的就是地址和基本数据类型两种

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gerministar
2015-04-10 · TA获得超过166个赞
知道小有建树答主
回答量:150
采纳率:0%
帮助的人:120万
展开全部
test1的参数a是形参,传进去的变量a是实参,test1执行的时候,形参和实参都指向"v",然后形参a赋值为"s",实参a没有改变,所以没有影响
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-04-10
展开全部
楼主,JAVA 规定,简单类型是传值的,复合类型(暂且这样称呼吧)才是传址的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式