Java中后患无穷的代码写法

环境:JDK1.8

以下写法,会因为环境不一样,导致结果不一致。
1.String的getBytes()无参方法。
原因:getBytes()会根据【System.getProperty(“file.encoding”))】的编码,来执行。

package zz;

public class Test {

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
// ni hao
String str = "\u4f60\u597d";
System.out.println("default encoding:" + System.getProperty("file.encoding"));
System.out.println(str);
System.out.println("default length:" + str.getBytes().length);
System.out.println("GBK length:" + str.getBytes("GBK").length);
System.out.println("UTF-8 length:" + str.getBytes("UTF-8").length);
}

}

以上代码编译为class文件之后,使用【java -Dfile.encoding=GBK zz.Test】,结果为

default encoding:GBK
你好
default length:4
GBK length:4
UTF-8 length:6

使用【java -Dfile.encoding=UTF-8 zz.Test】,结果为

default encoding:UTF-8
你好
default length:6
GBK length:4
UTF-8 length:6

在eclipse中,以下操作会更改【file.encoding】