1。while(1) 该判断在c++中,编译器会把int类型转换为布尔值,而在java中会报错。
2. java中范围大的数据向范围小的数据转换 ,需要强制转换并可能造成信息丢失,反之,会自动转换。
3.在java中条件与(&&)和逻辑与(&),以及条件或(||)和逻辑或(|)在布尔值运算上具有相同的结果。区别在于他们的运算过程是不相同的。条件与(&&)和条件或(||)采用的是所谓的“短路规则”,即在运算时先根据第一个操作数进行判断,如果从第一个草数就可以推出结果,那么就不会去计算第二个操作数。例如,a,b都是boolean型的变量,当a=true时,不管b取什么值,a||b均为true。这样b在条件或(||)运算下就不会被计算。而逻辑与(&)和逻辑或(|)则没有采用这一规则,不关第一个操作数值是什么,第二个操作数仍然会被计算。这样,当进行符合运算时,就可能出现不同的结果。
为了验证上面说的短路规则,请看下面的例子。首先声明变量month,并赋初值8。在程序的执行过程中均不修改变量month的值,从而在下面的布尔运算中,(month==8)一直保持为真。程序通过变量day的值是否发生变化来验证短路规则。
//test.java
public class test
{
public static void main(String [] args)
{
int month=8;//声明变量month,并赋8
int day=1;//声明变量day,值为1
if((month==8)||(++day<15))
System.out.println("Month="+month+"Day="+day);
if((month==8)|(++day<15))
System.out.println("Month="+month+"Day="+day);
}
} //End
执行的结果是:
Month=8 Day=1
Month=8 Day=2
}
}
在上面的程序中,关系(month==8)一直成立,所以上面的布尔运算结果均为真。在第一个条件语句“if((month==8)||(++day<15))”中,由于短路规则,所以(++day<15)不会被执行,从而这时变量day的值不会发生变化,即仍然为1。因此,输出的第一行为“Month=8 Day=1”。当执行到第二个条件语句“if((month==8)|(++day<15))”时,由于逻辑或(|)会计算第二个操作数,所以计算结果造成变量day的值发生变化,即变成2。因此,输出第二行为“Month=8 Day=2”。这也就验证了条件或(||)遵循短路规则,而逻辑或(|)不遵循短路规则。