62,612
社区成员
发帖
与我相关
我的任务
分享
public class DefaultTest {
private static int next(int i) {
switch(i) {
// 这里加default的理由是什么?而且为什么必须加在这里才行。
default:
case 0: return 0;
case 1: return 1;
}
}
public static void main(String[] args) {
int[] arr = new int[2];
for(int i = 0; i < arr.length; i++) {
arr[i] = next(i);
}
for(int i : arr) {
System.out.println(i);
}
}
}
private static int next(int i)
{
switch (i) {
case 0:
default:
return 0;
case 1:
}
return 1;
}
编译器认为你那样写的意思是,在i为0或缺省情况下,因为没有break,所以都返回0,在i为1的情况下,虽然退出了switch,但最后还是返回了1.
当default方法放在最后的话,0的时候返回0,1的时候返回1,而default,因为return本身起了break的作用,所以default的情况下,就没有返回了,所以程序无法编译。
所以default方法在中间也是可以编译的。 public int f() {
if(true) {
return 1;
}
}
public class DefaultTest {
private static java.util.Random rand = new java.util.Random(47);
private static int next() {
switch(rand.nextInt(2)) {
default:
case 0: return 0;
case 1: return 1;
// default: 加在这里会报错
}
}
public static void main(String[] args) {
int[] arr = new int[2];
for(int i = 0; i < arr.length; i++) {
arr[i] = next();
}
for(int i : arr) {
System.out.println(i);
}
}
}
这样的话switch中只可能出现0,1两种情况之一,那为什么还要额外加上一条返回语句呢?public class DefaultTest {
private static java.util.Random rand = new java.util.Random(47);
private static int next() {
switch(rand.nextInt(2)) {
default:
case 0: return 0;
case 1: return 1;
// default: 加在这里会报错
}
}
public static void main(String[] args) {
int[] arr = new int[2];
for(int i = 0; i < arr.length; i++) {
arr[i] = next();
}
for(int i : arr) {
System.out.println(i);
}
}
}
这样的话switch中只可能出现0,1两种情况之一,那为什么还要额外加上一条返回语句呢?