首页 > 其他 > 详细

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

时间:2014-01-16 00:09:25      阅读:469      评论:0      收藏:0      [点我收藏+]

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

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

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

下面给出代码验证:

bubuko.com,布布扣
    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);
    }
bubuko.com,布布扣

我的机器上的运行结果

  当s1=="ABCD"时:

  GBK

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

  当s1=="你好"时:

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

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

原文:http://www.cnblogs.com/qrlozte/p/3516716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!