今天我们讨论一下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当成缓冲区放在流中接受内容,所以没有发生引用指向的改变。