int a = 1;
Integer a1 = new Integer(1);
char b =1;
Character b1 = new Character('1'); System.out.println(a==b);
System.out.println(a==a1);
System.out.println(b==a1);
System.out.println(a==a1);
/**
 * 为什么都是“true”,难道他们都是同一个内存区间吗?请高人指点详解一下,谢谢!
 */

解决方案 »

  1.   

    JDK 1.5 以后,包装类会自动进行拆箱和装箱,做运算的时候都当作数值来用。
    另外,a, b, a1的值都相同,而b1肯定是跟他们不同的,但你好像写错了,没比较b1,比较了两遍a1。
      

  2.   

    当然,jvm中java栈中的局部变量区和操作数栈对byte,short,char,boolean都是用int来实现的
      

  3.   

    没错,都是true,很正常,char本质上就是无符号16位整数。
      

  4.   

    注意char a = 1和char a = '1'的区别的,char本质上就是int。
    LZ可以试试下面的语句:char a = 1; String s1 = String.valueof(a);System.out.println(s1); 
    char b = '1'; String s2 = String.valueof(b);System.out.println(s2);数据在内存中有两种存储方式:数值型和字符型。
    数值型存的就是原始数据(一般都是补码表示)。
    字符型存储的就是字符的ASCII值(JAVA是UNICODE编码的)。
    允许数值与ASCII互相转化。
    char a = 1,就是告诉编译器,向内存中放入1,而这个1表示的是某个字符的ASCII码(UNICODE码);
    而char a = '1',是向内存中放入字符1的ASCII码,是十进制49。
      

  5.   

    需要注意的是char a=1,和char a='1'的区别哈
      

  6.   

    long
    int
    short
    byte
    这四种都是数值型的,从短到长是可以自由转换的,从长到短之间不允许转换,就需要强转了,但会出现无法预测的结果。而int型和char型也是允许自由转换的。
                             char
                            |
                            |
              byte->short->int->long
    也就是说,char类型通过转换成int型,而后也可以转换成long类型,也可以转换成float和double类型。
      

  7.   

    1.
    JDK 1.5 以后,包装类会自动进行拆箱和装箱,做运算的时候都当作数值来用。
    另外,a, b, a1的值都相同,而b1肯定是跟他们不同的,但你好像写错了,没比较b1,比较了两遍a1。
    2.
    这种基本数据类型比较的是值相不相等,不是比较地址的。