background image

Java 与 C++细节上差异(一)

一、基本程序设计结构:
       Java 的基本程序结构、关键字、操作符都和 C/C++非常相似,以下为主要的几点区
别:
  1. Java 的原始数值型数据类型中不包含无符号类型,如 c 中的 unsigned int。

 

   2. 在进行移位运算时,当向左边移动时,如 1 << 35, 对于 int 类型,由于其占有
4 个 bytes(32bits), 因此在 Java 中,大于 32 的移位将对 32 取模,即 1 << 35 的结果
等于 1 << 3,以此类推,long 将会对 64 取模。对于 int 类型而言,如果确实需要获取
32 位以上的移位,需要将返回值的类型提升到 long 即可。

 

   3. 在 c 语言中,可以通过判断一个数值是否为 0 来代替布尔中的 false,其他的数
值均表示为 true。该写法可应用于 if 和 while

 

等子句中,如 if (i) {....}, 当 i 的值不为 0

时,该条件可为真,或者是在判断指针对象是否为 NULL 时,也可作为 if 和 while 的条
件,因此很容易出现将 if (i == 9) {...}写成 if (i = 9) {...}的低级错误,在 Java 中禁
止了该类转换,既 if 和 while 中条件必须是布尔类型,如果在 Java

 

中写成 if (i = 9) 

{...}将会直接导致编译错误,从而更好的避免了该类问题的发生。
  4. Java 中去除了 goto 字句,但是仍然视为保留字。然而 Java 中的 break 字句,新
增了带标签的 break [label],可以使 break 语句直接跳出指定的循环,而不仅仅是缺省
的最内层循环。注:标签必须放在希望跳出的最外层循环之前,并且紧跟一个冒号。如:
1         public void test() { 
2         int n; 
3         read_data: 
4         while (...) { 
5             for (...) { 
6                 System.out.print("Enter a number >= 0: "); 
7                 n = in.nextInt(); 8                 if (n < 0) 
9                     break read_data;
10             }
11         }
12         //下面的代码将会被立即执行,当 break 跳出最外层的循环之后。
13         if (n < 0) {
14             ...
15         } else {
16             ...
17         }
18     }
  5. Java 中支持 0 长度的数组定义,如 int et = new int[0]; 在 C/C++中,该写法
将会导致编译错误。
  6. 多维数组的两种常用访问方式。
1         public static void main(String[] args) { 2             int[][] magicSquare =  
3             {