为什么产生这样的输出?

public class Exam{
public static void main(String args[]){
byte d[]="java你好".getBytes();
String hao=new String(d,6,2);
System.out.println(hao);
String javani=new String(d,0,8);
System.out.println(javani);
//输出

java你

汉字算两个字节

在Java中,默认的编码方式为utf-8,汉字占三个字节,可以试一试在定义的时候改变为gbk模式,在gbk模式中汉字占两个字节

java的默认编码是UTF-8,但是看你的输出,应该是把你的默认编码设成了GBK,可通过添加虚拟机参数-Dfile.encoding=GBK设置编码方式,看看你是不是加个这个参数项。
汉子在GBK编码中占两个字节,在UTF-8编码中占三个字节。
另外new String()在解码时可以传入指定字符集,getBytes()在编码时也可以传入你指定的字符集。

byte d[]="java你好".getBytes("GBK");
        String hao=new String(d,6,2,"GBK");
        System.out.println(hao);
        String javani=new String(d,0,8,"GBK");
        System.out.println(javani);