王吉元-NWPU

导航

 

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

posted on 2013-12-23 11:17  王吉元  阅读(7754)  评论(0编辑  收藏  举报