一,&和&&的区别?
两者都能用作逻辑与的运算符,表示逻辑与(and),两边都为true才为true,但是&&还具有短路的功能,即第一个式子为false则不在计算第二个表达式
二,位运算符
位运算符主要操作二进制的位进行运算,其操作数和运算结果都是整型,&按位与的运算规则是将两边的数转换位二进制位,两个1才是1,1&0=0,0&1=0,0&0=0,1&1=1
按位或 |
1|0=1,1|1=1,0|0=0,
异或 ^ 不一样的就为1
1 ^0=1,0^0=0,1^1=0,
<< 二进制向左移两位,右边补0 ,如果是负数,右边补1
>>二进制向右移两位,正数左边第一位补0,负数补1
>>> 无符号右移运算符
与右移运算符的区别就是在右移的时候无论正负数左边都是补0
~ 取反运算符 把相应的二进制按位取反
三,关于二进制的问题?
负数的二进制:例:
-2: 先求2的二进制 0000 0010
按位取反 1111 1101
加1 1111 1110
求负数二进制的十进制 :例如 1111 1110
先按位取反0000 0001
加1 0000 0010 为2 加负号就是-2
四,java文件名与类名称的一致性问题
1,java文件中最多只有一个public类,可以没有public类
2,如果Java文件中有public类,则Java文件名必须与public类的类名相同,否则会编译错误.
3,如果文件中有多个类但没有public类,Java文件的名称可以是任意的,既可以是与Java文件中的类的名称相同,也可以不同.
五,跳出多重嵌套循环方法
1,使用标签
a:for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.println(j);
if(j==3){
break a;
}
}
}
2让外层的循环条件表达式的结果可以受到里层循环体代码的控制
boolean b=false;
a:for (int i = 0; i < 5&&!b; i++) {
for (int j = 0; j < 5; j++) {
System.out.println(j);
if(j==3){
b=true;
break ;
}
}
}
六,经典类型转换问题
short s1=1;
s1=s1+1;//编译报错
s1+=1;
s1+1 会自动升为int类型,不能赋值给short
+=是java语言规定的运算符,java编译器会进行特殊处理,所以可以正确编译
七,基础知识点
1,char是用来存储Unicode编码的,其中包含了汉字,如果某个特殊的汉字没有被包含在unicode编码字符集中,那就不能存储,unicode编码占用两个字节,所以,char类型的变量也是占用两个字节
2,error表示恢复很困难的情况下的一种严重问题,比如说内存溢出,exception表示一种设计或实现问题,如果程序正常运行,从不会发生的情况.