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!");
}
热 文 推 荐
☞