你的Java知识有多深?
前言关于java的基础知识,只是在大二初学时看得多些,今天看了看张孝祥老师的视频,突然发现自己根本不了解Java很多东西,有些是忘了,而有些以前根本不知道,拿来分享一下,这些你曾注意吗?(牛人就不要往下看了)
1.“&”和“&&”的区别分析
“&”和“&&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&&”的左边为false,则将不会计算其右边的表达式。“|”和“||”的区别与“&”和“&&”的区别一样。
public class TestAnd
{
public static void main(String[] args)
{
int x=0;
int y=3;
if(x!=0 && y==y/x)
System.out.println("y = "+y);
}
}
上面例子中,由于while语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个表达式之间用“&”来连接,如果正好碰到上面所示的特殊情况,程序运行时就会出错
2.浮点数在内存中的表示
这个在计算机原理和操作系统中看见的比较多,很基础的,例如分析0x50000000所对应的浮点数
2.“>>”和“>>>”是啥玩意
前者是位移运算的右移,这个不难,那后面的又是什么,区别在哪里?
任何信息在计算机中都是以二进制的形式保存的,&,|,^除了可以作为逻辑运算符,也可以做为位算符,它们对两个操作数中的每一个二进制位都进行运算。
只有参加运算的两位都为1,&运算的结果才为1,否则就为0。
只有参加运算的两位都为0,|运算的结果才为0,否则就为1。
只有参加运算的两位不同,^运算的结果才为1,否则就为0。
我们可以对数据按二进制位进行移位操作,java的移位运算符有三种:
<< 左移
>> 右移
>>> 无符号右移
public class ShiftTest
{
public static void main(String [] args)
{
int x=0x80000000;
int y=0x80000000;
x=x>>1;
y=y>>>1;
System.out.println(“0x80000000>>1 = ”+ Integer.toHexString(x));
System.out.println(“0x80000000>>>1 = ”+ Integer.toHexString(y));
}
}
运行结果如下:
0x80000000>>1 = c0000000
0x80000000>>>1 = 40000000
十六进制与二进的对比
0x80000000 =1000,0000, 0000, 0000, 0000, 0000, 0000, 0000
0xc0000000 =1100,0000, 0000, 0000, 0000, 0000, 0000, 0000
0x40000000 =0100,0000, 0000, 0000, 0000, 0000, 0000, 0000
3.Java中易做图数组是不不是规则矩阵形式?
解释:java 中并没有真正的易做图数组,只有数组的数组,Java中易做图数组不一定是规则矩阵形式。比如下面两个数组:
下面还有两个思考题,不难但是你能否毫不犹豫的说出答案?
思考题1:
某个培训中心要为新到的学员安排房间,假设共有x个学员,每个房间可以住6人,让你用一个公式来计算他们要住的房间数?
答案:(x+5)/6。这种算法还可用在查看留言板的分页显示上: 其中x是总共的留言数,6是每页显示的留言数,结果就是总共有多少页。
思考题2:
假设你要让x的值在0至9之间循环变化,请写出相应的程序代码。
答案:
int x=0;
while(true)
{
x = (x+1)%10;
}
作者:小文字
补充:软件开发 , Java ,