System.out.println((char)165573); 控制台 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这里的165573代表的是一个汉字,不是长度,代表的这个汉字的长度还在char的长度范围之内。查阅了一些资料,我是这样理解的。 >> 谁能解释一下这个,它可以在控制台输出一个汉字。确实可以输出一个汉字【蛅】,这个字的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:127type:short size:16 min:-32768 max:32767type:char size:16 min:0 max:65535type:int size:32 min:-2147483648 max:2147483647type:long size:64 min:-9223372036854775808 max:9223372036854775807type:float size:32 min:1.4E-45 max:3.4028235E38type:double size:64 min:4.9E-324 max:1.7976931348623157E308蛅蛅 【蛅】这个汉字相关的信息如下:http://baike.baidu.com/view/1734265.htm?fr=aladdin 165573转换为16进制是286C5,如果转换为char类型,则取后16位为86C5,即蛅。 楼主就是只看了 System.out.println((char)165573); 的输出,却忘记了看System.out.println(String.valueOf((int)(char)165573)); char是2个B,int 是4个B,(char)只剩后面2个B! 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编码表如下: 关于java applet的问题 有关SWt的移植问题 Hibernate的连接池怎么配,有哪几种? 为什么用JXL 操作后生成的EXCEL 文件无法读取啊? 求根据开始的日期和增加的月份数,取得结束的日期的方法。 有关集合框架泛型的问题 感兴趣的近来闲聊一下Delphi跟Java的比较!!!!进者有分 Process方法问题 12月24号偶生日为答谢各位朋友对偶的照顾特此散分!! Re:如何长久保存添入下拉列表框的项目信息?? 谁熟悉DB2XML套件 新手求问Java数组问题
确实可以输出一个汉字【蛅】,这个字的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
蛅
蛅
http://baike.baidu.com/view/1734265.htm?fr=aladdin
楼主就是只看了
System.out.println((char)165573);
的输出,却忘记了看
System.out.println(String.valueOf((int)(char)165573));
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编码表如下: