你的Java知识有多深?
3391 点击·0 回帖
![]() | ![]() | |
![]() | 前言 关于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; } | |
![]() | ![]() |