运行以下代码:
// In Java, output #####
public static void main(String[] args) {
int i = 1;
if(i == (i = 2)) {
System.out.println("@@@@@");
} else {
System.out.println("#####");
}
}
Run Code Online (Sandbox Code Playgroud)
但:
// In C, output @@@@@?I did test on Clion(GCC 7.3) and Visual Studio 2017
int main(int argc, char *argv[]) {
int i = 1;
if(i == (i = 2)) {
printf("@@@@@");
} else {
printf("#####");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
提出这个问题的动机来自以下代码:
// The code is from the JDK 11 - java.util.concurrent.atomic.AtomicInteger …Run Code Online (Sandbox Code Playgroud) 当我阅读ISO/IEC 9899:1999(见:6.5.2.3)时,我看到了一个这样的例子(强调我的):
以下不是有效的片段(因为联合类型在函数中不可见
f):Run Code Online (Sandbox Code Playgroud)struct t1 { int m; }; struct t2 { int m; }; int f(struct t1 * p1, struct t2 * p2) { if (p1->m < 0) p2->m = -p2->m; return p1->m; } int g() { union { struct t1 s1; struct t2 s2; } u; /* ... */ return f(&u.s1, &u.s2); }
我测试时发现没有错误和警告.
我的问题是:为什么这个片段无效?
我知道"实现接口"的意思是:一个类实现一个接口.现在我在Android Studio中遇到了一个谜题(在IntelliJ IDEA中,有类似的疑问.):请注意以下图片:当Child实现接口,并覆盖方法fun2时,左侧会有一个特定的图标.但是父不执行界面,为什么会出现相同的图标?

这里有更大的图片