一條java問題

以下係2個file,一個Result.java,一個testResult.java
public class Result{
  private double[] value;
  
  public Result(double[] valueArray){
   value=valueArray;
  }

  public String toString(){
    String aString=value[0]+"";
      for (int i=1; i<value.length;i++){
        aString=aString+", "+value[ i ];
      }
  
  return aString;
  }

  public double[] getvalue(){
   return value;
  }
  
  public void setvalue(double[] aValue){
   value=aValue;
  }

}

***************************

public class TestResult{
  public static void main(String[] args){
  Result result=new Result(new double[] {10.1,9.9,10.2,9.8});
  System.out.println(result);
  
  }

}

1) 我用system.out.println,print個result出黎,點解會出到野出黎?理論上不是只將數值交予valuearray然後assign啲值落value度?點解會print埋啲data出黎?是否System.out.println()已經同我return埋array裡面既值出黎?

2) 為何我不能這樣pass value落個array既constructor度?
  Result result=new Result(10.1,9.9,10.2,9.8);

而要再用new黎allocate多次memory space?

謝謝各c兄關注~

[ 本帖最後由 ihmcjacky 於 2008-12-18 23:09 編輯 ]

原帖由 ihmcjacky 於 2008-12-18 23:07 發表
以下係2個file,一個Result.java,一個testResult.java
public class Result{
  private double[] value;
  
  public Result(double[] valueArray){
   value=valueArray;
  }

  public String toString(){
    Str ...


1. System.out.println 暗地裏幫你call toString().
2. 以前java 唔支援不定數目既method parameters, 而家雖然得, 但係傳送一系列數字, 用array 合理D.
3. pass 咁多個parameter, stack 空間一樣會用多D, 未必會比做一個array 更有效率. 另外java 不設pass by value, 只有pass by reference. pass 一個array 不涉及抄寫array 內既內容.

TOP

Q1. 因為你 Implement 左 toString 呢個 Function... 當 Java VM Invoke System.out.println(result) 時,會 call Result.toString()... 所以有野出

Q2. 因為 Result 呢個 Class 嘅 Constructor 只接受 1 個 argument 而果個野就係 1 個 double array. 你問嘅問題入面係 pass 左一 set number 入去... 唔係 1 個 array... 用   Result result=new Result(new double[] {10.1,9.9,10.2,9.8}); 就會 ok ~

TOP

回覆 2,3# 的帖子

唔該哂樓上2位c兄~
問題1已經完全明白~~謝謝~
但看完thinkpanda大的答覆後想問一下:

Result result=new Result(new double[] {10.1,9.9,10.2,9.8}); 這句其實是否只是pass過memory address畀valuearray?然後valuearray又將自己收到memory address再pass畀value?

換句話說,是否value和valuearray裡的位置都不是儲實際值,而是儲memory address?

[ 本帖最後由 ihmcjacky 於 2008-12-18 23:46 編輯 ]

TOP

還有array可以用這個格式起的嗎?
我學的開array方法:
1) int [ ] a=new {1,2,3}
2) int [ ] a=new int[3]
就沒聽過
new double[ ] {10.1,9.9,10.2,9.8}
也可以開array,我看書是說一旦有initializer,new就可以唔要,那這樣寫不是不對麼?

[ 本帖最後由 ihmcjacky 於 2008-12-18 23:53 編輯 ]

TOP

2) 為何我不能這樣pass value落個array既constructor度?
  Result result=new Result(10.1,9.9,10.2,9.8);

Try varargs:
public Result(double... valueArray){};
then u can use   Result result=new Result(10.1,9.9,10.2,9.8);

Also, Array is a object, pass an object to method or constructor means to copy the bit of reference.
passing primitive is making a copy of the primitive bit representation

TOP

正確d黎講係reference,

在java,除左primative type e.g. int, double......etc之外,其他都係object,全部都係reference.
(可能有exception,勞煩指出)

TOP

原帖由 ihmcjacky 於 2008-12-18 23:52 發表
還有array可以用這個格式起的嗎?
我學的開array方法:
1) int [ ] a=new {1,2,3}
2) int [ ] a=new int[3]
就沒聽過
new double[ ] {10.1,9.9,10.2,9.8}
也可以開array,我看書是說一旦有initializer,new就可以唔要,那這樣寫不是不對麼?


你睇緊 C++ 既書嗎?

TOP

回覆 8# 的帖子

不是呀~是學校阿sir自己print既notes...
難道佢寫錯??

[ 本帖最後由 ihmcjacky 於 2008-12-19 01:18 編輯 ]

TOP

回覆 6# 的帖子

謝謝你~varargs其實我未學~~不過見c兄你寫出黎我又好奇google吓~~又學到野了~~

TOP