2013-07-20 22 views
-1

我對InputStream類的一種方法有疑問,因爲它對我來說似乎無法工作。InputStream.read(byte)方法如何工作?

讓我們有這樣的事情:

InputStream is; 
byte[] b = new byte[64]; 

is.read(b); 
// and now the byte array b contains data comming through InputStream??? 

我會明白,如果.read()方法的使用將是這個樣子:

b = is.read(); 

由於讀方法將返回字節數組。

但是,真正的方法怎麼能寫出一些東西給它的參數,並讓它在它自身之外可見呢?

這就像我會有這樣的:

String myString = "myText"; 

public void myMethod(String s) { 
    s = "abc123"; 
} 

myMethod(myString); 
// and now is the content of myString equal to "abc123" instead of "myText" ??? 
// ANSWER: no! 

感謝您的答覆。

+0

對象引用是按值傳遞。您無法更改其引用的對象,但可以更改其內容。即它只是一個淺拷貝。 –

+0

沒有'InputStream.read(字節)方法'這樣的事情。有一個讀(byte [])'方法。它對你的問題有所不同。 – EJP

回答

2

除基元類型之外的所有東西都是java中的對象(包括數組)。 對象通過參考副本從一種方法傳遞到另一種方法。因此,如果被調用的方法對傳遞給它的對象進行更改,方法最終會對傳遞給它的同一對象進行更改。因此,更改也會反映到調用方法中。

您需要了解對象以及它們如何在方法調用之間傳遞以詳細瞭解這些內容。請參閱this link以獲得更好的理解。

0

byte array以及Stringreference types ..When你將它們作爲參數有參照被複制,它們都指向同一個對象..


例如,remote就像是對TV的引用。當您將遙控器傳遞給另一個人時,他仍然能夠訪問TV

0

對象通過副本引用從一種方法傳遞到另一種方法。因此,如果被調用的方法對傳遞給它的對象進行了更改,方法最終將對傳遞給它的同一對象進行更改。因此,更改也會反映到調用方法中。例如,用String[]替換參數中的String並檢查輸出。

public static void main(String[] args) 
{ 
String[] myString = {"myText"}; 
myMethod(myString); 
System.out.println(myString[0]); 
} 

public void myMethod(String[] s) { 
    s[0] = "abc123"; 
}