函数调用能否修改参数 http://expert.csdn.net/Expert/topic/1437/1437310.xml?temp=.699917请看上面的贴子里我的回复。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //这个函数是不是写错了。flag=false,那不管怎么样也不会更改。不过真正解答就如楼上所说的。 public boolean fontDialogShow(Font font1) { flag = false; show(); if(flag) { //flag=false???? font1 = font; } return flag; } Norwaywoods() 我有点疑问,你那里面的传值和传引用是通过什么区别的?难道通过函数名byValue/byReference?还有传值是传对象地址好象不能这么说,传的应该是对象的副本,和原来的对象一点关系都没有而引用应该是对象的一个别名,不是地址,其实是一个对象,只不过换了一个名字,和指针不一样还有一点疑问?是不是自动识别传值还是传递引用的? 我替Norwaywoods() 回答吧:)其实java里面没有传值和传引用的参数。java里面基本类型都是传值,对象都是引用,Norwaywoods() 的函数里面参数其实都是引用,只不过结果一个传值一个引用而已。引用其实都是指针。 : pxq(风轻轻地吹) (可他明白在第一个方法里面修改了,第二个方法里面也修改了,你却说第一个方法是传值(外面不知道被修改),第二个方法是引用(外面知道修改)?还有引用是指针是不对的,引用是没有任何中件变量的,他给的是变量的本身(当然是地址),而指针是一种数据类型,指向变量,保存的是变量的地址 pxq():public boolean fontDialogShow(Font font1) { flag = ; show(); if(flag) { //flag=true; font1 = font; } return flag; }flag在show()中已被改变(font是该方法所在类的一个私有变量,已有初始数值,我传入的类对象font1(值引用),应该被修改了,且在外界用:jtextArea1.setFont(font1);,中的值应等于此类中的font,而不再是先前传入该函数中的值,但实际上仍然没变 我将你的函数改为另外一个参数名,这样好说一些。public boolean fontDialogShow(Font f1) { flag = ; show(); if(flag) { //flag=true; f1 = font; } return flag; }这个函数里面,你只是将f1指向另外一个对象,并没有改变原来对象的值。而外面的font1指向的是原来的对象。===================================另外你再看一下下面的例子:package testjdbc;public class testFunc { static class ObjectA{ public int m ; } public static ObjectA ob = new ObjectA(); public testFunc() { } static void funA(ObjectA o){ o.m = ob.m ; } static void funB(ObjectA o){ o = ob; } static void funC(ObjectA o){ o = new ObjectA(); o.m = ob.m ; } public static void main(String[] args) { ObjectA a = new ObjectA(); a.m = 1; ob.m= 20; System.out.println("before:" + String.valueOf(a.m ) ); funC(a); System.out.println("after funC:" + String.valueOf(a.m ) ); funB(a); System.out.println("after funB:" + String.valueOf(a.m ) ); funA(a); System.out.println("after funA:" + String.valueOf(a.m ) ); }}输出结果是:before:1after funC:1after funB:1after funA:20 process进程堵塞问题 帮忙 高手麻烦帮忙解释下,为什么这样!!! GUI设计问题,在线等? 帮我看一看错在那里 刚配好的tomcat,出了问题,请教 [swing][布局管理器][layout]怎样实现层叠的组件 j2的1.42版本为什么下载啦打不开? MessageDigest和DigestInputStream中digest()方法的疑惑 大家把在面试的难题公布一下,共同学习 谁能提供Oracle 9.1.0.1版的JDBC驱动(classes12.jar)??? 在JB7下能编译的文件,用JDK1.4.1为什么编译会出错了呢?
flag = false;
show();
if(flag) { //flag=false????
font1 = font;
}
return flag;
}
我有点疑问,你那里面的传值和传引用是通过什么区别的?难道通过函数名byValue/byReference?
还有传值是传对象地址好象不能这么说,传的应该是对象的副本,和原来的对象一点关系都没有
而引用应该是对象的一个别名,不是地址,其实是一个对象,只不过换了一个名字,和指针不一样
还有一点疑问?是不是自动识别传值还是传递引用的?
其实java里面没有传值和传引用的参数。java里面基本类型都是传值,对象都是引用,Norwaywoods() 的函数里面参数其实都是引用,只不过结果一个传值一个引用而已。
引用其实都是指针。
可他明白在第一个方法里面修改了,第二个方法里面也修改了,你却说第一个方法是传值(外面不知道被修改),第二个方法是引用(外面知道修改)?
还有引用是指针是不对的,引用是没有任何中件变量的,他给的是变量的本身(当然是地址),而指针是一种数据类型,指向变量,保存的是变量的地址
public boolean fontDialogShow(Font font1) {
flag = ;
show();
if(flag) { //flag=true;
font1 = font;
}
return flag;
}
flag在show()中已被改变(font是该方法所在类的一个私有变量,已有初始数值,我传入的类对象font1(值引用),应该被修改了,且在外界
用:jtextArea1.setFont(font1);,中的值应等于此类中的font,而不再是先前传入该函数中的值,但实际上仍然没变
public boolean fontDialogShow(Font f1) {
flag = ;
show();
if(flag) { //flag=true;
f1 = font;
}
return flag;
}
这个函数里面,你只是将f1指向另外一个对象,并没有改变原来对象的值。而外面的font1指向的是原来的对象。===================================
另外你再看一下下面的例子:
package testjdbc;public class testFunc {
static class ObjectA{
public int m ; } public static ObjectA ob = new ObjectA(); public testFunc() {
}
static void funA(ObjectA o){
o.m = ob.m ;
} static void funB(ObjectA o){
o = ob;
} static void funC(ObjectA o){
o = new ObjectA();
o.m = ob.m ;
} public static void main(String[] args) {
ObjectA a = new ObjectA();
a.m = 1;
ob.m= 20;
System.out.println("before:" + String.valueOf(a.m ) );
funC(a);
System.out.println("after funC:" + String.valueOf(a.m ) );
funB(a);
System.out.println("after funB:" + String.valueOf(a.m ) );
funA(a);
System.out.println("after funA:" + String.valueOf(a.m ) );
}
}输出结果是:
before:1
after funC:1
after funB:1
after funA:20