黑马程序员技术交流社区

标题: 【已解决】引用地址传递问题,输出结果为空 [打印本页]

作者: 黎健东    时间: 2012-8-21 17:51
标题: 【已解决】引用地址传递问题,输出结果为空
本帖最后由 黎健东 于 2012-8-21 20:57 编辑

package com.lee.calc.test007;

public class Test {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Num p = new Num();
                p.plus();
               
                //我的本意是,往plus(String result)这个方法传进去decimalResult,intResult两个不同的参数
                //并用decimalResult,intResult这两个分别new一个对象,然后往这个对象里边存值
               
                //当读取decimalResult,intResult这两个的值时,结果是空
                //于是猜测是用result new了对象,而没有使用decimalResult,intResult new,所以空
               
                //如何才能实现传进去的是decimalResult,intResult,也是用decimalResult,intResult,而不是用result实例化对象呢?
                //难道不是把decimalResult这个的地址作为引用传递给result,result 是使用decimalResult引用地址new对象吗?
                System.out.println(p.getDecimalResult());
                System.out.println(p.getIntResult());
        }

}

class Num{
        //小数结果
        private StringBuilder decimalResult;

        //整数结果
        private StringBuilder intResult;
        //是否包含小数
        private boolean isDecimal = true;
        //是否到整数了
        private boolean isInt;
        public Num() {
                // TODO Auto-generated constructor stub
        }
        
        public void plus(){
                if(isDecimal){
                        plus(decimalResult);
                }
                plus(intResult);
        }
        
        private void plus(StringBuilder result){
                result = new StringBuilder();
                result.append("10000");
        }
        
        public StringBuilder getDecimalResult() {
                return decimalResult;
        }

        public StringBuilder getIntResult() {
                return intResult;
        }
        
}
作者: 唐杨老师    时间: 2012-8-21 19:26
你在plus内部实例化的对象,在方法结束后就释放掉了,result添加的值也并没有传给成员变量,
按照下边的改一下吧.
  1. class Num {
  2.         private StringBuilder decimalResult = new StringBuilder();;
  3.         // 整数结果
  4.         private StringBuilder intResult = new StringBuilder();;
  5.         // 是否包含小数
  6.         private boolean isDecimal = true;
  7.         // 是否到整数了

  8.         public Num() {
  9.         }

  10.         public void plus() {
  11.                 if (isDecimal) {
  12.                         plus(decimalResult);
  13.                 }
  14.                 plus(intResult);
  15.         }

  16.         private void plus(StringBuilder result) {
  17. //                result = new StringBuilder();
  18.                 result.append("10000");
  19.         }

  20.         public StringBuilder getDecimalResult() {
  21.                 return decimalResult;
  22.         }

  23.         public StringBuilder getIntResult() {
  24.                 return intResult;
  25.         }

  26. }
复制代码

作者: 黎健东    时间: 2012-8-21 20:57
唐杨 发表于 2012-8-21 19:26
你在plus内部实例化的对象,在方法结束后就释放掉了,result添加的值也并没有传给成员变量,
按照下边的改一下 ...

原来如此,哈哈,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2