同一个String在使用不同的charset编码的时候equals仍然是返回true吗

1、对于ASCII字符,是的(只要该charset涵盖了ASCII编码),使用任何charset编码都不会影响equals的判断

2、对于非ASCII字符,不一定。例如同中文字符串"你好",在UTF-8编码下的String和GBK编码下的String两个equals可能返回false

参考这篇文章中的例子:http://www.cnblogs.com/qrlozte/p/3516702.html

下面给出代码验证:

    public static String convertCharset(String arg, String charsetName) {
        String result = null;
        try {
            result = new String(arg.getBytes(Charset.defaultCharset()), charsetName);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return result;
    }
    public static void main(String[] args) {
        System.out.println(Charset.defaultCharset());
        String s1 = "ABCD"; // 尝试把s1换成中文字符
        String s2 = convertCharset(s1, "UTF-8");
        String s3 = convertCharset(s1, "GBK");
        String s4 = convertCharset(s1, "GB2312");
        System.out.println(
                (s1.equals(s2)) + ", " +
                (s1.equals(s3)) + ", " +
                (s1.equals(s4)) + ", " +
                (s2.equals(s3)) + ", " +
                (s2.equals(s4)) + ", " +
                (s3.equals(s4))
        );
        System.out.println(s1 + ", " + s2 + ", " + s3 + ", " + s4);
    }

我的机器上的运行结果

  当s1=="ABCD"时:

  GBK

  true, true, true, true, true, true
  ABCD, ABCD, ABCD, ABCD

  当s1=="你好"时:

  GBK
  false, true, true, false, false, true
  你好, ???, 你好, 你好

posted @ 2014-01-12 23:25  rldts  阅读(972)  评论(0编辑  收藏  举报