Java 语言中十大“坑爹”功能!
int count =
1;
switch(count){
case
1:
System.
out.println(
"one");
case
2:
System.
out.println(
"two");
case
3:
System.
out.println(
"three");
}
one
two
three
然而,这并不是我们想要的,或者说违反了我们的常识。满足了某种条件,当然就只需要执行这种条件下的逻辑即可,其他的case应该不予理会、直接跳过,象上面这段代码,只需要输出one就行了。当然,在每个case结尾处加上break就可以达到我们期望的效果。
int
num =
1;
System.out.println(
false && ((
num++)==
1));
System.out.println(
num);
int[] arr =
new
int[]{
1,
3,
5,
7,
9};
for(
int i=
0;i<arr.length;i++){
System.
out.println(
"the element is:"+arr[i]);
}
String str =
"hello world";
System.
out.println(str.charAt(
1));
public static void main(String[] args) {
List<String>
list =
new ArrayList<String>();
list.add(
"abc");
list.add(
"bc");
list.add(
"bc");
list.add(
"abcd");
list.add(
"abcdef");
//报错
int length =
list.size();
for(
int i =
0;i < length;i++){
if(
list.get(i).equals(
"bc")){
list.remove(i);
}
}
}
for(
int i=
0;i<
list.size();i++){
if(
list.get(i).equals(
"bc")){
list.remove(i);
}
}
char symbol =
'8';
System.
out.println((
int) symbol);
int i =
0;
while(i++<
3)
System.
out.print(
"A");
System.
out.print(
"B");
AAAB
而不是3个A、3个B,更“坑爹”的是,如果两条语句放在一行上,迷惑性会更大:
int i =
0;
while(i++<
3)
System.
out.print(
"A");System.
out.print(
"B");
public static void main(String[] args){
Integer a =
100;
Integer b =
100;
Integer c =
200;
Integer d =
200;
System.
out.println(a==b);
System.
out.println(c==d);
}
true
false
这确实太出乎意料了,同样的代码,只是数值不同(而且差别不太大的样子),就产生了不一样的输出,这也太离谱了。原来,Integer中有一个静态内部类IntegerCache,在类加载的时候,它会把[-128, 127]之间的值缓存起来,而Integer a = 100这样的赋值方式,会首先调用Integer类中的静态valueOf方法,这个方法会尝试从缓存里取值,如果在这个范围之内就不用重新new一个对象了:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return
new Integer(i);
}
int i =
1;
while(i<
4){
System.
out.println(i++);
}
int i =
1;
while(i<
4);{
System.
out.println(i++);
}
int i =
100;
i =+
2;
//注意,加号在后面
System.
out.println(i);
public static void main(String[] args){
// \u000d System.out.println("Hello World!");
}
热 文 推 荐
☞
