Java棘手的输出问题
问题1:以下代码的输出是什么:
public class A {
public static void main(String[] args)
{
if (true)
break;
}
}
选择:
- a) 没有
- b) 错误
答案: b) 错误
原因: Break 语句只能与循环或开关一起使用。因此,在 if 语句中使用 break 会导致“break outside switch or loop”错误。
问题2:以下代码的输出是什么:
public class A {
public static void main(String[] args)
{
System.out.println('j' + 'a' + 'v' + 'a');
}
}
选择:
- 一) Java
- b) 别的东西(除了简单的连接)
答案: b) 别的东西(除了简单的串联)
原因:如果使用字符串字面量(在双引号中),将打印“ Java ”,但在问题中由于使用了字符字面量,这些不会被连接。因此程序执行后,会得到一个字符的每一个等价的ASCII(Unicode)值相加。
因此输出为106 + 97 + 118 + 97 = 418
问题 3:以下代码的输出是什么:
public class A {
public static void main(String[] args)
{
int $_ = 5;
}
}
选择:
- a) 没有
- b) 错误
答案: a) 没有
原因:看起来 $ 会导致错误,但不会。在Java中,标识符规则说,标识符可以以任何字母或下划线(“_”)或美元(“$”)开头。所以答案是Nothing。
问题 4:以下代码的输出是什么:
public class Demo{
public static void main(String[] arr){
Integer num1 = 100;
Integer num2 = 100;
Integer num3 = 500;
Integer num4 = 500;
if(num1==num2){
System.out.println("num1 == num2");
}
else{
System.out.println("num1 != num2");
}
if(num3 == num4){
System.out.println("num3 == num4");
}
else{
System.out.println("num3 != num4");
}
}
}
选择:
- a) 数字 1 == 数字 2
数字 3 == 数字 4 - b) 数字 1 == 数字 2
数字 3 != 数字 4 - c) 数字 1 != 数字 2
数字 3 == 数字 4 - d) 数字 1 != 数字 2
数字 3 != 数字 4
答案: b)num1 == num2
数字 3 != 数字 4
原因:我们一直认为,每当使用“==”比较两个对象引用时,结果总是“假”。但是这里整数缓存会改变结果。整数类的缓存范围为 -128 到 127。只要数字介于此范围之间并且使用自动装箱,它就会分配相同的引用。这就是为什么对于值 100,num1 和 num2 将具有相同的引用,但对于值 500(不在 -128 到 127 的范围内),num3 和 num4 将具有不同的引用。
问题 5:以下代码的输出是什么:
public class Demo{
public static void main(String[] arr){
}
public static void main(String arr){
}
}
选择:
- a) 没有
- b) 错误
答案: a) 没有
原因:我们也可以重载 main()。但是 JVM 将始终调用具有 String[] 参数的 main()。
更多Java输出问题