当前位置:编程学习 > JAVA >>

你的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。
 

image

 

 

 
只有参加运算的两位不同,^运算的结果才为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中多维数组不一定是规则矩阵形式。比如下面两个数组:
imageimage 

下面还有两个思考题,不难但是你能否毫不犹豫的说出答案?
思考题1:
某个培训中心要为新到的学员安排房间,假设共有x个学员,每个房间可以住6人,让你用一个公式来计算他们要住的房间数?
答案:(x+5)/6。这种算法还可用在查看留言板的分页显示上: 其中x是总共的留言数,6是每页显示的留言数,结果就是总共有多少页。
思考题2:
假设你要让x的值在0至9之间循环变化,请写出相应的程序代码。
答案:
int x=0;
while(true)
{
  x = (x+1)%10;
}
 
 
作者:小文字
  
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,