解决方案 »

  1.   

    你这里的165573代表的是一个汉字,不是长度,代表的这个汉字的长度还在char的长度范围之内。查阅了一些资料,我是这样理解的。
      

  2.   

    >> 谁能解释一下这个,它可以在控制台输出一个汉字。
    确实可以输出一个汉字【蛅】,这个字的Unicode编码为【U+86C5】,用十进制表示为【U+34501】>> char最大的承受范围不是65535吗?
    在Java中,char最大的取值范围是65535>> 这都超到哪去了?
    【U+34501】并没有超过【65535】>> 竟然还可以?
    因为【(char) 165573】把原来的大的数据【165573】在数据类型转换的过程中给自动截短了
    System.out.println((char) 165573);相当于System.out.println(34501);>> 还是我的理解char不能表示65535以上数字的理解有误?
    这个理解没有问题package topics_390899834;public class CharTest {    public static void main(String[] args) {
            PrimitiveTypeSizeMinMax.print();
            System.out.println((char) 165573);
            System.out.println((char) (165573 - 2 * (1 + (int) Character.MAX_VALUE))); // 34501
        }
    }class PrimitiveTypeSizeMinMax {
    // public static void main(String[] args) {     public static void print() {
            // Boolean does not have Boolean.SIZE, Boolean.MIN_VALUE, or Boolean.MAX_VALUE
            displaySizeMinAndMax(Byte.TYPE, Byte.SIZE, Byte.MIN_VALUE, Byte.MAX_VALUE);
            displaySizeMinAndMax(Short.TYPE, Short.SIZE, Short.MIN_VALUE, Short.MAX_VALUE);
            displaySizeMinAndMax(Character.TYPE, Character.SIZE, (int) Character.MIN_VALUE, (int) Character.MAX_VALUE);
            displaySizeMinAndMax(Integer.TYPE, Integer.SIZE, Integer.MIN_VALUE, Integer.MAX_VALUE);
            displaySizeMinAndMax(Long.TYPE, Long.SIZE, Long.MIN_VALUE, Long.MAX_VALUE);
            displaySizeMinAndMax(Float.TYPE, Float.SIZE, Float.MIN_VALUE, Float.MAX_VALUE);
            displaySizeMinAndMax(Double.TYPE, Double.SIZE, Double.MIN_VALUE, Double.MAX_VALUE);
        }    public static void displaySizeMinAndMax(Class<?> type, int size, Number min, Number max) {
            System.out.printf("type:%-6s size:%-2s min:%-20s max:%s\n", type, size, min, max);
        }
    }
    输出:
    type:byte   size:8  min:-128                 max:127
    type:short  size:16 min:-32768               max:32767
    type:char   size:16 min:0                    max:65535
    type:int    size:32 min:-2147483648          max:2147483647
    type:long   size:64 min:-9223372036854775808 max:9223372036854775807
    type:float  size:32 min:1.4E-45              max:3.4028235E38
    type:double size:64 min:4.9E-324             max:1.7976931348623157E308

      

  3.   

    【蛅】这个汉字相关的信息如下:
    http://baike.baidu.com/view/1734265.htm?fr=aladdin
      

  4.   

    165573转换为16进制是286C5,如果转换为char类型,则取后16位为86C5,即蛅。
      

  5.   


    楼主就是只看了 
    System.out.println((char)165573); 
    的输出,却忘记了看
    System.out.println(String.valueOf((int)(char)165573));
      

  6.   

    char是2个B,int 是4个B,(char)只剩后面2个B!
      

  7.   

    public class Test {
    public static void main(String[] args) {
    int i = 165573;
    System.out.println("十进制表示" + i);
    String b = Integer.toBinaryString(i);
    System.out.println("二进制表示" + b);
    String b16 = b.substring(b.length() - 16, b.length());
    System.out.println("二进制的后16位" + b16);
    BigInteger bi = new BigInteger(b16, 2);
    System.out.println("二进制的后16位对应的10进制" + bi.toString());
    String h = Integer.toHexString(Integer.parseInt(bi.toString()));
    System.out.println("二进制的后16位对应的16进制" + h);
    System.out.println((char)i);
    System.out.println((char)Integer.parseInt(bi.toString()));

    }
    }
    输出结果:
    十进制表示165573
    二进制表示101000011011000101
    二进制的后16位1000011011000101
    二进制的后16位对应的10进制34501
    二进制的后16位对应的16进制86c5


    JAVA中char占两个字节(16位),所以超出16位的部分在强制转换的时候被遗弃,剩下的16位的十六进制为86c5,查看unicode编码表如下: