System.out.println((char)165573);

问题描述

谁能解释一下这个,它可以在控制台输出一个汉字。char最大的承受范围不是65535吗?这都超到哪去了?竟然还可以?还是我的理解char不能表示65535以上数字的理解有误?

解决方案

解决方案二:
你这里的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以上数字的理解有误?这个理解没有问题packagetopics_390899834;publicclassCharTest{publicstaticvoidmain(String[]args){PrimitiveTypeSizeMinMax.print();System.out.println((char)165573);System.out.println((char)(165573-2*(1+(int)Character.MAX_VALUE)));//34501}}classPrimitiveTypeSizeMinMax{//publicstaticvoidmain(String[]args){publicstaticvoidprint(){//BooleandoesnothaveBoolean.SIZE,Boolean.MIN_VALUE,orBoolean.MAX_VALUEdisplaySizeMinAndMax(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);}publicstaticvoiddisplaySizeMinAndMax(Class<?>type,intsize,Numbermin,Numbermax){System.out.printf("type:%-6ssize:%-2smin:%-20smax:%sn",type,size,min,max);}}

输出:type:bytesize:8min:-128max:127type:shortsize:16min:-32768max:32767type:charsize:16min:0max:65535type:intsize:32min:-2147483648max:2147483647type:longsize:64min:-9223372036854775808max:9223372036854775807type:floatsize:32min:1.4E-45max:3.4028235E38type:doublesize:64min:4.9E-324max:1.7976931348623157E308蛅蛅

解决方案五:
【蛅】这个汉字相关的信息如下:http://baike.baidu.com/view/1734265.htm?fr=aladdin
解决方案六:
165573转换为16进制是286C5,如果转换为char类型,则取后16位为86C5,即蛅。
解决方案七:
楼上大神都是正确答案你强制转换了当然就可以
解决方案八:
引用5楼rumlee的回复:

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!
解决方案十:
publicclassTest{publicstaticvoidmain(String[]args){inti=165573;System.out.println("十进制表示"+i);Stringb=Integer.toBinaryString(i);System.out.println("二进制表示"+b);Stringb16=b.substring(b.length()-16,b.length());System.out.println("二进制的后16位"+b16);BigIntegerbi=newBigInteger(b16,2);System.out.println("二进制的后16位对应的10进制"+bi.toString());Stringh=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编码表如下:
解决方案十一:
不好意思上面的图接错了,上面扩起来的是86c4
解决方案十二:
哇,都是大神,我都不敢班门弄斧啦

时间: 2024-12-21 07:09:51

System.out.println((char)165573);的相关文章

java基础-System.out.println()输出自定义类中的char[]变量

问题描述 System.out.println()输出自定义类中的char[]变量 大家好:我在编程时遇到system.out.println输出问题 public static void main(String[] args) { Solution sol=new Solution(); sol.tmp=new String(""12345600024402000"").toCharArray();//这里用toCharArray()是因为方程输入类型是char[

System.out.println(Integer.toString(60, 37));

问题描述 System.out.println(Integer.toString(60,37));输出结果:1oo是什么意思?是什么符号?谢谢回答! 解决方案 解决方案二:Returnsastringrepresentationofthefirstargumentintheradixspecifiedbythesecondargument.把60用37进制表示,o就类似于16进制中的A到F吧.解决方案三:publicclassSyso{publicstaticvoidmain(String[]a

CMS系统中学习到的快速将System.out.println全部转化为logger

Logger log = Logger.getLogger(CmsSendXML.class); 然后replaceALL System.out.println 为 log.info

java io学习(十六) System.out.println("hello world")原理

我们初学java的第一个程序是"hello world" 1 public class HelloWorld { 2     public static void main(String[] args) { 3         System.out.println("hello world"); 4     } 5 } 上面程序到底是怎么在屏幕上输出"hello world"的呢?这就是本来要讲解的内容,即System.out.println(&

java中System.out.println( );这个方法是

问题描述 java中System.out.println( );这个方法是 java中System.out.println( );这个方法是System类里的out对象的println方法的意思,即类.对象.方法 解决方案 对,就是这个意思.... 解决方案二: 假设有一个实例Object o则当System.out.println(o);时,它其实是自动调用o.toString()方法,然后输出该方法返回的string字符串.当System.out.println(o.toString());

java-Java中 System.out.println(count++)输出结果没有自加1

问题描述 Java中 System.out.println(count++)输出结果没有自加1 public class CountTest{ public static void main(String[] args){ int count = 20 ; System.out.println(count++); } }//输出的结果为20,不是21,求解 解决方案 System.out.println(++count);///这个是21 先运行++count,后输出 System.out.pr

问题-为什么直接输入System.out.println(++2);会报错

问题描述 为什么直接输入System.out.println(++2);会报错 public class Test1 { public static void main(String[] args) { System.out.println(++2); } } 解决方案 因为2是一个常量,常量是不能自加或者自减的.

System.out.println() 和 log4j 的 Logger 循环输出100万次。

log4j配置参考: http://javapub.iteye.com/blog/866664 循环代码如下 system循环.       耗时,11691 package com; public class TestStaticClassMain { public static void main(String[] args) { long start = System.currentTimeMillis() ; for (int i = 0; i < 1000000; i++) { Sys

快捷键-关于java快速生成main方法和system.out.println的问题

问题描述 关于java快速生成main方法和system.out.println的问题 java快速生成main方法和system.out.println如何按"alt+/"就生成而不需要按回车?我之前在别的电脑上试过快速生成main方法和""system.out.println""直接按""alt+/""就可以快速生成,但在自己电脑上按""alt+/""会先出现一个