zoukankan      html  css  js  c++  java
  • 同一个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
      你好, ???, 你好, 你好

  • 相关阅读:
    一些 SQLite技巧
    linux增加swap空间
    linux解压命令
    数据库常用语句
    服务器命令
    Clickhouse高可用配置总结
    MySQL笔记
    Linux查看硬件信息
    Greenplum安装
    ClickHouse学习笔记
  • 原文地址:https://www.cnblogs.com/qrlozte/p/3516716.html
Copyright © 2011-2022 走看看