String str2 = "1234";
  System.out.println(str2.charAt(1)=='2');  //TRUE
  System.out.println(str2.charAt(1)==50);  //TRUE50是unicode的代码单元表示
为什么编译器会这样实现转换?

解决方案 »

  1.   

    一个 是 char 一个 是 int  最终 都一样的 。。
      

  2.   

    字符2在ASCII码的中是50  就如同字符a是97一样System.out.println(('2' == 50)&&('a' == 97));
      

  3.   

    System.out.println((int)'2');  == 50
      

  4.   

    char 类型数据转型为 int型
      

  5.   

    api里面说的是Unicode 代码单元
    为什么你说的是ascii码?
    这2种码是不一样的
    请指教
      

  6.   

    应该是unicode吧,不过对于一部分字符他们是一致的
      

  7.   

    char a=‘2’ 和int a=2,二进制表示后两个字节是一样的
      

  8.   

    char 与 int 进行 *, /, +, -, <, >, <=, >=, ==, !=, &, ^, |, ? : 操作时 char 会自动提升为 int 类型,char 提升为 int 类型是按照 Unicode 代码点来转换的。Unicode 代码点也就是 Unicode 的编码,'2' 的 Unicode 代码点为 U+0032,代码点序值为 0x32,也就是 50。
    这个 '2' 会被提升为 50 再与 int 的 50 进行比较。
      

  9.   

    Unicode 代码点也就是 Unicode 的编码,'2' 的 Unicode 代码点为 U+0032,代码点序值为 0x32,也就是 50。 
    这个 '2' 会被提升为 50 再与 int 的 50 进行比较。
      

  10.   

    字符'2'和的ascii是50,在于==运算符,java底层重载此运算符时由于等式两边都是基本数据类型,所以会像其中的一边进行转换,'2'转成整型后就是50