http://expert.csdn.net/Expert/topic/1437/1437310.xml?temp=.699917
请看上面的贴子里我的回复。

解决方案 »

  1.   

    //这个函数是不是写错了。flag=false,那不管怎么样也不会更改。不过真正解答就如楼上所说的。   public boolean fontDialogShow(Font font1) {
         flag = false;
         show();
         if(flag) {  //flag=false????
           font1 = font;
          }
         return flag;
       }
      

  2.   

    Norwaywoods() 
    我有点疑问,你那里面的传值和传引用是通过什么区别的?难道通过函数名byValue/byReference?
    还有传值是传对象地址好象不能这么说,传的应该是对象的副本,和原来的对象一点关系都没有
    而引用应该是对象的一个别名,不是地址,其实是一个对象,只不过换了一个名字,和指针不一样
    还有一点疑问?是不是自动识别传值还是传递引用的?
      

  3.   

    我替Norwaywoods() 回答吧:)
    其实java里面没有传值和传引用的参数。java里面基本类型都是传值,对象都是引用,Norwaywoods() 的函数里面参数其实都是引用,只不过结果一个传值一个引用而已。
    引用其实都是指针。
      

  4.   

    : pxq(风轻轻地吹) (
    可他明白在第一个方法里面修改了,第二个方法里面也修改了,你却说第一个方法是传值(外面不知道被修改),第二个方法是引用(外面知道修改)?
    还有引用是指针是不对的,引用是没有任何中件变量的,他给的是变量的本身(当然是地址),而指针是一种数据类型,指向变量,保存的是变量的地址
      

  5.   

    pxq():
    public boolean fontDialogShow(Font font1) {
         flag = ;
         show();
         if(flag) {  //flag=true;
         font1 = font;
          }
         return flag;
       }
    flag在show()中已被改变(font是该方法所在类的一个私有变量,已有初始数值,我传入的类对象font1(值引用),应该被修改了,且在外界
    用:jtextArea1.setFont(font1);,中的值应等于此类中的font,而不再是先前传入该函数中的值,但实际上仍然没变
           
      

  6.   

    我将你的函数改为另外一个参数名,这样好说一些。
    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