2016-05-12 83 views
4
String str[] = new String[5]; 
CSVReader read = new CSVReader(new FileReader("abc.csv")); 
str = read.readNext(); 
str[3] = "A"; 

在上面的代碼片段中,我聲明瞭大小爲5的字符串數組。我使用OpenCSV來解析我的CSV文件。 CSV文件有三列。聲明str = read.readNext()將值存儲在str [0],str [1],str [2]中。問題是執行這條語句後,數組str的大小減少爲3.由於str [3]拋出ArrayIndexOutOfBounds異常。爲什麼尺寸從5減少到3?字符串數組大小得到修改

+1

「語句str = read.readNext()將值存儲在str [0],str [1],str [2]中。」不,它不。它用一個全新的數組替換_'str'。 –

回答

6

array的大小可以改變,但read.readNext正在恢復與可能在其中將其分配給同一個變量str不同大小一個全新的陣列。

0

你不讀數組,但你分配新對象str變量。

如果您將str變量定義爲final,編譯器會發出抱怨。順便提一下,這是一個很好的做法。用final表示,您不打算更改對象引用,編譯器將幫助您執行此操作,以免意外重新分配變量。

原始數組不可調整大小,因爲數組是不可變的(關於維數)。 read.readNext()之後會發生什麼是原始數組(大小= 5)不再被引用並將被垃圾收集。但在收集之前,它的大小仍然是5(儘管這在那個時候變得有點不相關)。

+0

它不是重新聲明變量。它爲變量分配一個新的值。這是非常不同的。 –

+0

感謝Jon,你說得對,我已經修好了 –

0

readNext()以csv中列的大小返回對String [] - 數組的引用,並將其存儲在str中。

之後,str指向這個String數組。你重新聲明它。

1

readNext是returing一個全新的陣列爲您提供:

String str[] = new String[5]; 

手段 「讓 'STR' 是指長度爲5的一個新的String數組」

CSVReader read = new CSVReader(new FileReader("abc.csv")); 

建立一個叫做「新CSVReader閱讀'

str = read.readNext(); 

調用'readNext'並設置'str'來引用結果(儘管我只是要求您使用該名稱來指新的空字符串長度爲5)

str[3] = "A"; 

現在訪問readNext結果中的第4個元素。順便說一句,因爲你沒有創建'str'所指的數組,所以你不知道它的大小,所以需要使用.length