Java基础小常识(1)

一、模问题

1.负数模整数,结果为负数,例:-5%2 = -1;

2.正数模负数,结果为正数,例:5%(-2)=1;

3.负数模负数,结果为负数,例:-5%(-2)=-1;

4.0模任何数结果为0,例:0%5 = 0;

二、自增、减问题

1.

三、强制类型转换

1.System.out.println(‘a’+0),输出=97;

2.任何以整数出现的数据,默认都是int类型

 如:byte a= 4;  其中4就是一个int类型,但由于在编译过程中,编译器会自动判断 4 是不是在byte 范围内,若是,会自动舍弃前三字节,相当于系统自动进行强制类型转  换,将int整数4转换为byte类型。

3. byte a=4,b=3,c;

c=a+b,编译出错,因为a和b虽然是两个byte变量,但在进行a+b求和时,编译器会自动把byte类型数据转换成int类型,故a+b的结果会是一个int型,而将一个int型赋值给byte,就会出错,因为两个类型的字节不同,int是4个字节,byte是一个字节,字符是2个字节 char  ch ='你'是对的,因为一个汉字是两个字节。

  总结:1.两个变量相加,先对类型进行提升,然后运算,再将运算结果赋值。

     2.两个常量相加,先计算常量数值,然后判断是否满足类型范围,再赋值。

四、自增/减问题

1. byte i=0,j;

  i=i++;输出i等于0;首先,系统分配一个临时缓存区,假设为temp,首先temp=i=0,然后i自增变成1,然后i=temp,所以i的结果为0而不是1.

  i=++i;输出i等于1;首先,i自增变成1,然后系统分配一个临时缓存区,假设为temp,temp=i=1,然后i=temp,所以i的结果为1而不是0.

五、赋值运算

1.byte i=3,j;

  i+=1;和 i = i+1的区别,1)i = i + 1;会出错,而 i+=1;不会,因为 i +=1相当于是 i =1,系统会判断1是不是在byte范围内,是进行的一次计算,而 i = i+1;是两次计               算。就有字节不同的问题。

               2 )+=会自动进行byte类型转换,而=的左边会自动进行类型提升,即变成int型。所以一个通过,一个不能通过。

               3 ) i += j;也不会出错,因为编译器内部对于+=默认会有字节转换,即将j转换成byte类型。

六、小问题:

1.‘a’+0 =97,编译器会自动把字符变成int型的数值,即'a'变成整数97。

2.‘7’-'0'= 7

3.负数变成二进制数,就是负数的绝对值的二进制数取反加1,负数的二进制最高位为1,二正数为0;

 

posted @ 2017-03-30 11:10  Aftersoon_sun  阅读(190)  评论(0编辑  收藏  举报