class Test5 
{
public static void main(String[] args) 
{
short a='a';
char b=a;
}
}--------------------
编译时提示char b=a 可能损失精度,为什么不提示short a='a'会损失精度?

解决方案 »

  1.   

    虽然char和short大小都是16bit
    但是char最小值Unicode 0 最大值 Unicode 2^16-1
    short最小值-32768 最大值32767
      

  2.   

    那么char类型赋值给short类型也会丢失精度,为什么不提示呢?
      

  3.   

    楼主是什么JDK版本啊这个我的不让编译
      

  4.   

    都有提示。我验证过了。
    short s = 9;
    char c =10;
    s = c;E:\java>javac TestPerson.java
    TestPerson.java:34: 可能损失精度
    找到: char
    需要: short
                            s = c;
                                ^
    1 错误E:\java>
      

  5.   

    char只能自动转换为int以及int以上优先级的
    char-->int-->long-->float-->double 
      

  6.   


    你把代码改为这样试试,会不会提示?
    class Test5 {
        public static void main(String[] args) {
    char b = 'b';
    short a = b;;
        }
    }
      

  7.   

    你把代码改为这样试试,会不会提示?
    class Test5 {
      public static void main(String[] args) {
    char b = 'b';
    short a = b;;
      }
    }
      

  8.   

    'a'是char,为什么 short a='a'不提示丢失精度?
      

  9.   

    'a'并不是char,在计算机眼中它是数字97,那它是什么类型呢?编译下面两语句:
    char a=-'a';
    short b=-'a';
    “char a=-'a'”-----提示:可能损失精度
    找到: int
    需要: char
        char a=-'a';  那 -'a' 是int类型了,short b=-'a' 也编译有问题呀,因将int赋值给short,如果真是这样,那short还怎样赋值?编译器提示“可能损失精度”,往往是类型可能容不下数据,即有可能超出范围,如“char a=-'a'”就是超出范围了,故有提示。char和short大小都是16bit,但范围不同,互相包容不了。
      char a='b';int b=a;--- 可以,因int容得下char。
      

  10.   

    char和short互相赋值都会产生损失精度的问题,‘a’在计算机内部应该是整数,所以允许short   b=-'a'
      

  11.   

    。你在eclipse首选项那里把编码改为ascii应该就不会报错了