今天我们讨论一下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[];
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[]; 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[];
try{
FileInputStream fileInputStream=new FileInputStream(new File("./file/test.txt"));
fileInputStream.read(array);
System.out.println("length: "+array.length);
}
catch(IOException){
//dosomething
}
答案是:
5.
因为这和上个例子的赋值操作时不同的,这次是将array当成缓冲区放在流中接受内容,所以没有发生引用指向的改变。