首页 > 试题广场 >

Given the following code,What

[单选题]
Given the following code:
public class Test {
    private static int j = 0;

    private static Boolean methodB(int k) {
        j += k;
        return true;
    }

    public static void methodA(int i) {
        boolean b;
        b = i < 10 | methodB(4);
        b = i < 10 || methodB(8);

    }

    public static void main(String args[]) {
        methodA(0);
        System.out.println(j);
    }
}
What is the result?
  • The program prints”0”
  • The program prints”4”
  • The program prints”8”
  • The program prints”12”
  • The code does not complete.
推荐
选 B
在main函数中先调用methodA(0)
在methodA中,第二行
b = i < 10 | methodB(4); //中间为与计算符,执行完methodB(4)后,j = 4 
methodA中,第三行
b = i < 10 || methodB(8);//中间为或计算符,因为i < 10 已成立,不需要后续计算
所以最后结果输出为4

编辑于 2015-02-04 17:58:25 回复(14)
这道题主要考的是"|"与"||"的区别
用法:condition 1 | condition 2、condition 1 || condition 2
"|"是按位或:先判断条件1,不管条件1是否可以决定结果(这里决定结果为true),都会执行条件2
"||"是逻辑或:先判断条件1,如果条件1可以决定结果(这里决定结果为true),那么就不会执行条件2

//i=0, i<10为true,但是依然执行methodB(4),之后 j=4
b = i < 10| methodB(4);
//i=0, i<10位true,可以决定结果,所以不会执行methodB(8),j依然=4
b = i < 10|| methodB(8);


发表于 2015-04-09 16:35:24 回复(15)
考察短路/(ㄒoㄒ)/~~,做错了
发表于 2016-05-02 21:35:47 回复(0)
卧槽
发表于 2016-01-01 23:07:07 回复(0)
||的短路特性导致不再进行methodB(8)
发表于 2015-10-14 14:11:28 回复(0)
  1. Java允许对boolean类型的值进行按位“与”、“或”和“异或”操作,但不能进行按位“非”。
  2. 对于boolean值,按位操作与逻辑操作有相同的结果,但是不会发生“短路”。
发表于 2015-09-10 19:47:31 回复(2)
||与&&具有短路特性。
|:表示或运算,全为0则为0,否则为1。(有1为1,全为0才为0)
&:表示与运算,全为1则为1,否则为0。(有0为0,全为1才为1)
^:异或运算,相同为0,不同为1。
发表于 2016-07-11 22:22:19 回复(3)
没有出现编译错误是因为,1:boolean b ;b变量没有被直接调用,如:
boolean b; 
System.out.println(b);
//这样必然会出现报错,报错为未初始化变量
//如果是下面这样 boolean b; 
b=false;
System.out.println(b); //则不会出现报错
静态变量在类加载时初始化(未提供初始值时,jvm会提供默认的初始值)
成员变量在类实例化时初始化(未提供初始值时,jvm会提供默认的初始值)
局部变量必须提供初始值,但是可以先声明,后提供初始值(jvm不会提供默认的初始值)

发表于 2019-04-22 21:53:55 回复(2)
考察| 和||的区别 前者一定会运行后面的语句 后者只要条件前面为真就不会运行后面的语句
发表于 2015-10-21 08:32:22 回复(0)
选B
表达式1 || 表达式2(逻辑或)的短路功能。表达式1为真,表达式2不再执行。
表达式1 && 表达式2(逻辑与)的短路功能。表达式1为假,表达式2不再执行。
|与&可没有短路功能。
发表于 2018-07-17 09:54:19 回复(1)
Boolean作为局部变量没有初始化不报错我**
发表于 2017-10-06 10:47:09 回复(5)
boolean b 的编译器警告:The value of the local variable b is not used
发表于 2017-10-04 20:40:44 回复(0)
看第一眼,感觉看不懂题呢,只有我一人感觉这样嘛
发表于 2019-02-22 11:02:29 回复(0)
|| 和  &&都有短路特性
发表于 2015-09-01 15:47:10 回复(0)
语句1 | 语句2  这两个语句都会执行
语句1 || 语句2 如果第一个语句为真就直接过了,第二个语句将不会运行
编辑于 2022-04-03 19:46:03 回复(0)
第11行,b = i <10| methodB(4); “|” 前后的条件都要执行,methodB(4)执行后j = 4;
到了第12行,b = i <10|| methodB(8); “||” 是逻辑与也是短路与,i <10成立,所以methodB(8)不会执行;
所以最后输出4。
发表于 2019-11-13 21:03:35 回复(0)
局部变量不是需要手动初始化么?难道因为这里是静态方法?
自己回答:局部变量使用前必须初始化,即需要赋值,这里就是在进行赋值
编辑于 2019-06-05 22:18:30 回复(0)

1.逻辑与(&)和逻辑或(|):

标准的逻辑与(&)和逻辑或(|),不论第一个表达式为true or false,都计算第二个表达式。
例如:if (c==0 | e++ < 100) { d=12;} //不论c是否等于0,e都被自增量。
例如:if (c==0 | e++ < 100) { d=12;} //不论c是否等于0,e都被自增量。

2.短路与(&&)和短路或(||)

A&&B, 当A为false时,不去计算B的值而直接返回false;当A为true时,计算B的值。
A || B,当A为true时, 不去计算B的值而直接返回true;当A为false时,计算B的值。
A || B,当A为true时, 不去计算B的值而直接返回true;当A为false时,计算B的值。

3.应用比较

短路&& 是很有用的。例如,下面的程序语句说明了短路逻辑运算符的优点,用它来防止被0除的错误:
if (denom != 0 && num / denom > 10) 既然用了短路与(&&) 运算符,就不会有当denom为0时产生的意外运行时错误。如果该行代码使用标准与 运算符(&),它将对两个运算数都求值,当出现被0除的情况时,就会产生运行时错误。
既然短路运算符在布尔逻辑运算中有效,那么就在布尔逻辑运算中全用它,而标准的AND 和OR运算符(只有一个字符)仅在位运算中使用。
编辑于 2017-11-15 10:13:05 回复(0)
这道题主要考的是"|"与"||"的区别
用法:condition 1 | condition 2、condition 1 || condition 2
"|"是按位或:先判断条件1,不管条件1是否可以决定结果(这里决定结果为true),都会执行条件2
"||"是逻辑或:先判断条件1,如果条件1可以决定结果(这里决定结果为true),那么就不会执行条件2
发表于 2017-04-22 19:26:41 回复(0)
选B,这题考查了逻辑运算符 “或 |”与“短路或 ||”
或 |:不管 i<10是否成立,都会执行methodB(4)
短路或 ||:如果  i<10成立,则不会执行methodB(8)

发表于 2021-07-16 21:16:59 回复(0)
有方便上机的试一下吗?这个b属于局部变量,但是没有直接初始化,在后面接着初始化也行的吗?
发表于 2020-08-06 15:11:12 回复(0)