同一个String在使用不同的charset编码的时候equals仍然是返回true吗
2014-01-12 23:25
344 查看
1、对于ASCII字符,是的(只要该charset涵盖了ASCII编码),使用任何charset编码都不会影响equals的判断
2、对于非ASCII字符,不一定。例如同中文字符串"你好",在UTF-8编码下的String和GBK编码下的String两个equals可能返回false
参考这篇文章中的例子:/article/6726040.html
下面给出代码验证:
我的机器上的运行结果
当s1=="ABCD"时:
GBK
true, true, true, true, true, true
ABCD, ABCD, ABCD, ABCD
当s1=="你好"时:
GBK
false, true, true, false, false, true
你好, ???, 你好, 你好
2、对于非ASCII字符,不一定。例如同中文字符串"你好",在UTF-8编码下的String和GBK编码下的String两个equals可能返回false
参考这篇文章中的例子:/article/6726040.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
你好, ???, 你好, 你好
相关文章推荐
- 确定字符互异 确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代
- 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的
- 当重写的父类的返回值类型是子类的返回值类型的父类的时候返回值类型就可以不同 比如父类的返回值是Object 子类的返回值类型是String 同意吗
- 关于Ajax执行完毕之后返回值的问题,想让它执行完毕返回一个true或者false供之后使用。
- 当重写的父类的返回值类型是子类的返回值类型的父类的时候返回值类型就可以不同 比如父类的返回值是Object 子类的返回值类型是String 同意吗?
- 原串翻转 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串
- 单元测试时候使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且应采用一个TestContext类型的参数报错的解决办法
- 让同一个tomcat中不同的工程的使用不同的rul编码方式
- 测试不同编码的string中文 equals结果
- Golang 中使用 JSON 的一些小技巧 陶文 陶文 3 个月前 有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用。 本来用一个json:",string" 就可以支持了
- 在使用mybaitis传参数的时候,仅传入一个类型为String的参数所遇到的问题
- vfork 挂掉的一个问题拓展实验一 (子进程使用return返回时候的栈帧)
- 在使用JdbcTemplate.queryForMap(String )的时候发现一个问题.
- 对页面中的某一个变量或部分代码段使用不同的的编码方式
- 使用Volley StringRequest返回String 编码格式错误乱码问题解决
- java:String使用equals和==比较的区别
- 程序使用ObjectOutputStream(new FileOutputStream(fileName,true))向文件尾写入多个对象,多次运行,最后进行读取的时候抛出StreamCorruptedException
- 面试时候遇到的一个问题:禁用cookie后还能使用session吗?