今天我們討論一下Java的byte數組。byte數組就是字節數組,每一位存一個字節。看下面程序,猜猜輸出多少?
package com.wjy.bytes; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class ByteArrayTest { public static void main(String args[]){ byte array[]=new byte[5]; System.out.println("length: "+array.length); } }
答案:
當然是5了。
但是,如果程序編程這樣呢?
package com.wjy.bytes; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class ByteArrayTest { public static void main(String args[]){ byte array[]=new byte[5]; array="Yes".getBytes(); System.out.println("length: "+array.length); } }
就是將一個字符串轉化成byte數組賦值給當前數組,答案是多少呢?
答案:
應該是3了。為什么呢?
因為array實際是一個引用(可以理解為指針),將字符串轉化的字符數組賦值給array變量,實際上array以前是指向堆區那個初始化的字節數組的,現在轉而指向了string轉化成的數組。
byte array[]="Yes".getBytes(); System.out.println("length: "+array.length);
以上語句其實也是合法的。
再來看一個問題:若test.txt中只有一個字母a。想想會輸出多少呢?
byte array[]=new byte[5]; try{ FileInputStream fileInputStream=new FileInputStream(new File("./file/test.txt")); fileInputStream.read(array); System.out.println("length: "+array.length); } catch(IOException){ //dosomething }
答案是:
5.
因為這和上個例子的賦值操作時不同的,這次是將array當成緩沖區放在流中接受內容,所以沒有發生引用指向的改變。