float f = 10.0;   // error
float f = 10.0f;  // ok
10.0的默认类型是double,double赋值给float,当然不行。
再看:
char c = 10;      // ok
byte b = 10;      // ok
short s = 10;     // ok
int i = 10;       // ok
10的默认类型是int,int赋值给char,byte,short,为什么就可以呢?
在java中10这个常量到底是怎么存放的呢?和String类型的常量(例如“hello”)是一样的吗?
是数字的整型常量都存为32位整型吗?

解决方案 »

  1.   

    因为在Java中规定所有整数默认是int型。但是只要在byte,short它们的取值范围内赋值都是可以的,比如byte=127 就是可以的 但是你给byte=128  就不行了 因为就超出byte 127 的最大范围了。char=数字 并不代表那是一个数字  char赋值整数代表的是它背后的符号  字符  。因为每一个字符给它硬性对应一个整数值,这是美国老规定的,char的整数也是有范围的  应该0到是6万多,这个大概知道就行了。
      

  2.   

    4楼正解!byte, short, int, long这些整数默认都是int型,都是以int型计算的,只要不超过他们的取值范围就可以进行赋值。
    byte 为1字节 -128~127
    short为2字节 -32,768~32,767  
    int为4字节 -2,147,483,648~2,147,483,647
    long 为8字节 -9,223,372,036,854,775,808L~9,223,372,036,854,775,807L 
    而char为2字节 0~65535
      

  3.   

    你好,是这样的。Java中整数默认是int是正确的。这里
    char c = 10;      // ok
    byte b = 10;      // ok
    short s = 10;     // ok
    int i = 10;       // ok
    正确的原因倒不是因为整数不整数,是因为10在编译阶段就是确定的,编译器可以对它进行范围检查,所以如果char c = 300就会编译阶段报错。
    如果这样:
    int i = 10;
    char c = i;
    虽然范围也是正确的,但是编译器会报错。
      

  4.   

    一般JVM虚拟机都会做一个预处理。
      

  5.   

    6楼说的对好像有个经典的面试题short a=1;
    a += 1;
    a = a+1;好像是这样的,问那段代码出错
      

  6.   

    默认是Int型,看编译器,会转型。
      

  7.   

    byte型数据占一个字节,short型数据占16位,int型数据占32位,10这个数字在内容中不用一个字节就可以存储,所以没有问题。
      

  8.   

    why a = a+1 error?
      

  9.   

    short  a=1;
    jvm会隐式的进行强转,在强转之前要检查所赋值的范围,要是在范围之内,就不报错。
      

  10.   

    后面的数值常量在 -128~127 范围内类型为byte
    后面的数值常量在 -2^15 ~ -128 & 127 ~ 2^15 - 1  范围内类型为short
      

  11.   

      char c=10;//ok 这是给c初始化一个值
        c=c+10;//error char=char+int   
        c+=10; //ok += 相当于初始化
      byte b=10;//ok 这是给b初始化一个值
        b=b+10;//error byte=byte+int
    b+=10;//ok += 相当于初始化
      short s=10;//ok 这是给s初始化一个值
        s=s+10;//error shor=shor+int
    s+=10;//ok += 相当于初始化
      int  i=10;//ok 这是给i初始化一个值
         i=i+10;//ok  int=int+int
     i+=10;//ok