现在的位置: 首页 > 综合 > 正文

一些java的基础知识

2017年10月10日 ⁄ 综合 ⁄ 共 1586字 ⁄ 字号 评论关闭

前言

(原标题好像有些问题,我想说的是本文不是什么实际项目中一定会应用的知识,知识基础概念问题,)关于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所对应的浮点数

image

 

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;
}

抱歉!评论已关闭.