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”,难道他们都是同一个内存区间吗?请高人指点详解一下,谢谢!
*/
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”,难道他们都是同一个内存区间吗?请高人指点详解一下,谢谢!
*/
另外,a, b, a1的值都相同,而b1肯定是跟他们不同的,但你好像写错了,没比较b1,比较了两遍a1。
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。
int
short
byte
这四种都是数值型的,从短到长是可以自由转换的,从长到短之间不允许转换,就需要强转了,但会出现无法预测的结果。而int型和char型也是允许自由转换的。
char
|
|
byte->short->int->long
也就是说,char类型通过转换成int型,而后也可以转换成long类型,也可以转换成float和double类型。
JDK 1.5 以后,包装类会自动进行拆箱和装箱,做运算的时候都当作数值来用。
另外,a, b, a1的值都相同,而b1肯定是跟他们不同的,但你好像写错了,没比较b1,比较了两遍a1。
2.
这种基本数据类型比较的是值相不相等,不是比较地址的。