1、float a = 3.5; int b = a; 打印b的结果是什么
因为数据类型的转换从下到上(byte、short、int、long、float、double)是可以自动转换的,但是从下到上需要强制转换,所以编译就会出错
2、int a = 5; float b = a; 打印b的结果是什么
因为float是浮点数,打印出来是5.0
3、char a = 'A'; int b = a; 打印b的结果是什么
字符A对应的编码是65,打印出来的是65
4、int a = 68; char b = a; 打印b的结果是什么
int转换为char型时,需要强制转换,所以编译会出错
5、画出基本数据类型的兼容关系图
布尔类型与其他类型都不兼容,兼容可以理解为不同存储空间的类型之间的转换;
从下到上分别是byte、short、int、long、float、double,
从下到上是可以自动转换,也称为隐式转型;
从上到下是需要强制转换,不然会报错,称为显式转型;其中强制转换可能会导致精度丢失。
6、变量的命名规则 :
1)、名称只能由字母、数字、下划线、$符号组成
2)、命名时不能以数字开头
3)、在命名是绝对不能出现Java关键字。
4)、不允许在命名时出现中文及拼音命名。
驼峰命名法 :当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,因此被称为驼峰。驼峰命名法的命名规则可视为一种惯例,并无绝对与强制,为的是增加识别和可读性。
大驼峰 :(即帕斯卡命名法)把第一个单词的首字母也大写了。常用于类名,属性,命名空间等;
小驼峰:除第一个单词之外,其他单词首字母大写,常用于函数名和变量名;
连字符命名法:用“-、_”将单词隔开,一般最好不用连字符,因为,很多变量命名有限制要求。
7、分别用表格整理算术运算符, 赋值运算符,比较运算符,逻辑运算符,位运算符,单目运算符,三目运算符
类型 | 操作符 | 描述 |
算术运算符 | + | 加法 - 相加运算符两侧的值 |
- | 减法 - 左操作数减去右操作数 | |
* | 乘法 - 相乘操作符两侧的值 | |
/ | 除法 - 左操作数除以右操作数 | |
% | 取余 - 左操作数除以右操作数的余数 | |
++ | 自增: 操作数的值增加1 | |
-- | 自减: 操作数的值减少1 | |
赋值运算符 | = | 简单的赋值运算符,将右操作数的值赋给左侧操作数 |
+ = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | |
- = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | |
* = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | |
/ = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | |
(%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | |
<< = | 左移位赋值运算符 | |
>> = | 右移位赋值运算符 | |
&= | 按位与赋值运算符 | |
^ = | 按位异或赋值操作符 | |
| = | 按位或赋值操作符 | |
比较运算符 | == | 检查如果两个操作数的值是否相等,如果相等则条件为真。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | |
逻辑运算符 | && | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(短路与) |
& | 不短路与 | |
| | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(短路或) | |
| | 不短路或 | |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 | |
位运算符 | & | 按位与。当计算的数对应的比特位同时为1的时候才返回1,其他情况为0 |
| | 按位或。当计算的数对应的比特位只要有一个1就返回1 | |
^ | 按位异或。只要两位相同的时候返回0,否则返回1 | |
〜 | 按位非。将操作数的每一位(包括符号位)全部取反 | |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | |
单目运算符 | ++ | 自增: 操作数的值增加1 |
-- | 自减: 操作数的值减少1 | |
~ | 按位非 | |
三目运算符 | ?: | 该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量 |
8、=和==的区别
= 是赋值运算符 (可以是直接量赋给变量, 也可以是变量赋给变量)
== 是是否相等的比较运算符
9、i++和++i的区别
如果表达式中只有 ++或--运算, 则在变量前面或后面没有区别
如果表达式中除了 ++或--, 还有其他运算
则在变量前面, 先运行++或--, 再运行其他运算
在变量后面, 先运行其他运算, 再运行 ++ 或 --
比如:(a++)-2表示先执行a-2,然后再a++;++a-2表示先执行++a,在执行(++a)-2
10、+运算符操作数值, 字符, 字符串的区别是什么
比如:System.out.println(3+5);//数值相加,结果为8
System.out.println('3'+'5');//字符所对应的utf-8编码相加,单引号表示字符,结果为104
System.out.println("3"+"5");//字符串的连接,双引号表示字符串,结果为35
11、&和&&的区别
短路与(&&): 左边不成立, 右边就不会运算了, 因为与要求两边都成立, 如果左边已经为不成立, 右边就没有运算的意义了, 因为无论右边是否成立, 也不会影响最终结果
不短路与(&): 左边不成立, 右边就失去了运算的意义, 但是也会运算一下
12、|和||的区别
短路或(||): 左边成立, 右边就不会运算了, 因为或要求两边都不成立, 如果左边已经成立了, 右边就失去了运算的意义了, 因为无论右边是否成立. 也不会影响最终结果
不短路或(|): 左边成立, 右边就失去了运算的意义, 但是也会运算一下
13、&可以作为逻辑运算符使用, 也可以作为位运算符使用, 区别是什么
&作为逻辑运算符时:表示为与,运行结果为Boolean型;
&作为位运算符时:表示为按位与,当计算的数对应的比特位同时为1的时候才返回1,其他情况为0。
14、|可以作为逻辑运算符使用, 也可以作为位运算符使用, 区别是什么
|作为逻辑运算符的时候:表示为或,运行结果为Boolean型
|作为位运算符时:表示为按位或,当计算的数对应的比特位只要有一个1就返回1
15、什么是原码、反码、补码
原码:把一个数转换为二进制数,第一位数为符号位组成的叫原码;
反码:除符号位以外,其他的全部取反;
补码:反码+1;
注意:正数的原反补码都是一样的!
计算机里面存的是补码
16、图解3&5的运算过程和结果
&表示当计算的数对应的比特位同时为1的时候才返回1,其他情况为0
17、图解3|5的运算过程和结果
|表示当计算的数对应的比特位只要有一个1就返回1
18、图解~5的运算过程和结果
~将操作数的每一位(包括符号位)全部取反
19、图解3^5的运算过程和结果
^表示只要两位相同的时候返回0,否则返回1
20、图解8<<2的运算过程和结果
左移<<(有无符号位都一样,低位补充0),8<<2就是快速计算8*4
8<<2:00001000,左移两位:00100000(低位补0)
结果为32.
21、图解8>>2的运算过程和结果
>>表示有符号位的右移:
8>>2:00001000,右移2位:00000010(正数高位填充0,低位舍弃)
结果为2;
-8>>2:11111000,右移2位:11111110(负数高位填1,低位舍弃)
结果为-2.
22、图解~5和~-5的运算过程和结果