`
ol_beta
  • 浏览: 289486 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

java中的陷阱 你注意了么?

    博客分类:
  • java
阅读更多

总结几个经典的java陷阱给大家。

答案隐藏了,Ctrl+A显示。建议先思考一下结果,然后运行代码试验。也许你会恍然大悟。

1、找奇数:

public static boolean isOdd(int i){ 
		 return i % 2 == 1; 
	}
 

上面的方法真的能找到所有的奇数么?

A:没有考虑到负数问题,如果传参是负数,那么永远不能得到结果!应该是:return i % 2 != 0;

2、浮点数想减

System.out.println(2.0-1.9);
 

 

上面会打印0.1么?

A:不会,自己试验就知道结果了。正确做法:用decimal。

3、交换

int x = 2010; 
int y = 2012; 
x^=y^=x^=y;
System.out.println("x= " + x + "; y= " + y);
 

 

x、y的值呼唤了么?

A:没有,java运算顺序是从左到右的,应该这么写:y=(x^= (y^= x))^ y;

4、字符和字符串

System.out.println("H" + "a");
System.out.println('H' + 'a');
  

上面两个语句输出结果相同么?

A:不想同,字符会被转换成在数字。所以第一句输出:Ha,第二句输出两个字符的assii码相加的数字。

5、无限循环

public static final int END = Integer.MAX_VALUE; 
public static final int START = END - 100; 
public static void main(String[] args) {
	int count = 0; 
	for (int i = START; i <= END; i++) 
		count++; 
	System.out.println(count); 
	}
 

 

上面程序运行的结果是什么?

A:无限循环。将i<=END改成i<END?为什么呢?你知道的,呵呵!

6、计数器问题

int minutes = 0; 
for (int ms = 0; ms < 60*60*1000; ms++) 
	if (ms % 60*1000 == 0) 
	    minutes++; 
System.out.println(minutes);
 

 

结果跟你想的一样么?

A:呵呵,括号问题,不多说!

7、到底返回什么?

public static boolean decision() { 
	 try { 
	    return true; 
	} finally { 
	  return false; 
	} 
} 
 

true?false?

A:一般情况下,不管怎么说try/catch代码块中,finally总是最后被执行的。

8、错误里聚集遍历

public static void main(String[] args) {
		Vector v = new Vector();
		v.add("one");
		v.add("two");
		v.add("three");
		v.add("four");
		Enumeration enume = v.elements();
		while (enume.hasMoreElements()) {
			String s = (String) enume.nextElement();
			if (s.equals("two"))
				v.remove("two");
			else {
				System.out.println(s);
			}
		}
		System.out.println("What's really there...");
		enume = v.elements();
		while (enume.hasMoreElements()) {
			String s = (String) enume.nextElement();
			System.out.println(s);
		}
	}
 

运行代码看看结果跟你想的一样么?

A:一般不建议在遍历聚集的时候对聚集进行操作。为什么结果是这样呢?看JDK源码能得到答案。Enumeration没有实现Fail Fast操作,如果换成ArrayList,上面的代码可能会出错。《java与模式》迭代子(iterator)介绍了。

推荐:《Java解惑》

分享到:
评论
17 楼 gaohenggaoheng 2011-10-12  
第八个这样就可以了:

List v = new ArrayList(); 
        v.add("one"); 
        v.add("two"); 
        v.add("three"); 
        v.add("four"); 
        Iterator t = v.iterator(); 
        while (t.hasNext()) { 
            String s = (String) t.next(); 
            if (s.equals("two")) 
                t.remove(); 
            else { 
                System.out.println(s); 
            } 
        } 
        System.out.println("What's really there..."); 
        Iterator tt = v.iterator(); 
        while (tt.hasNext()) { 
            String s = (String) tt.next(); 
            System.out.println(s); 
        } 
16 楼 tonyinfy2011 2011-10-12  
A:《Java解惑》里有更详细的解释啊,Answer见书
15 楼 lzl836 2011-10-12  
shuaiji 写道
socrazy06 写道
第七题应该是true吧?

地球人都知道

地球人都知道你是错的。
14 楼 athrunwang 2011-10-11  
有点儿意思,学习了!
13 楼 yitiaolo 2011-10-11  
不知道博主是否试过
-11%2,-10%2
12 楼 LubinJava 2011-10-11  
我了个去.我傻了.
11 楼 foohsinglong 2011-10-11  
经过测试是false,得好好看看java puzzlers了
10 楼 foohsinglong 2011-10-11  
socrazy06 写道
第七题应该是true吧?

是了true
9 楼 qpshenggui 2011-10-11  
gdwenjun 写道
答案隐藏了,Ctrl+A显示。看不到答案啊

把带A:的那一行选中就看见了
8 楼 shuaiji 2011-10-11  
socrazy06 写道
第七题应该是true吧?

地球人都知道
7 楼 soutnila 2011-10-11  
平时会有人这么写代码吗?比如括号问题,很多东西运行结果不正确是很容易调试的。楼主真会炫耀。。浮躁。。
6 楼 socrazy06 2011-10-11  
第七题应该是true吧?
5 楼 1051620106 2011-10-11  
真是好东西啊
4 楼 gdwenjun 2011-10-11  
Ctrl+A
3 楼 zhaoshun0417 2011-10-11  
Ctrl+A
2 楼 gdwenjun 2011-10-11  
答案隐藏了,Ctrl+A显示。看不到答案啊
1 楼 tangkang87 2011-10-11  
double a = 2.0;
double b = 1.9;

System.out.println((float)(a-b));
这个就能打印出结果0.1

相关推荐

    java陷阱常见面试题

    Java语言在实际应用中充满了各种陷阱,这些陷阱可能在...通过深入理解和实践这些Java陷阱,不仅可以避免在编程中犯错,也能在面试中展现出专业技能,为你的职业生涯加分。不断学习和探索,使你在Java的世界里游刃有余。

    Java基础方面陷阱.

    然而,即便是经验丰富的开发者也可能在面试或实际工作中陷入一些“陷阱”。本资源旨在帮助Java程序员理解和避免这些常见的问题和误区。 首先,我们来探讨Java的基础方面。Java的基础包括语法、数据类型、运算符、...

    Java编程中须注意的细节.pdf

    下面将详细阐述文档中提到的Java编程中应注意的几个关键细节。 1. 数值表达式中的奇偶判断 在Java中,判断一个整数是否为奇数时,应避免使用i%2==1的表达式,因为当整数i为负数时,例如-1%2的结果为-1,这并不是...

    Java Scjp 陷阱大全

    "Java SCJP 陷阱大全"显然是一份集合了Java编程中常见错误、陷阱和难点的资料,旨在帮助考生或者开发者避免在实际工作中遇到这些问题。以下将详细介绍Java SCJP考试中的一些关键知识点和常见陷阱: 1. **基本语法**...

    Java面试中的陷阱

    Java面试中的陷阱往往涉及到对语言核心概念的深度理解,这些陷阱涵盖了从基本语法特性到高级设计模式的应用。面试官通常会通过一些看似简单但实际上需要深入理解的问题来测试候选人的技能和经验。 首先,我们来看看...

    Java编程中static和final关键字的陷阱.pdf

    Java编程中static和final关键字的陷阱是Java开发中两个重要的关键字,但是它们的使用也存在一些陷阱,需要开发者注意掌握。 static关键字可以用于修饰属性、方法和类。static关键字修饰的成员变量称为静态成员变量...

    Java 一些值得注意的细节

    本文将深入探讨Java的一些值得注意的细节,帮助你避免常见陷阱,提升代码质量。 1. **自动装箱与拆箱**:Java中的`Integer`等包装类提供了自动装箱和拆箱功能,方便了开发者操作。但需要注意,虽然在基本类型和包装...

    Java基础复习笔记03我们不会注意的陷阱

    ### Java基础复习笔记03:我们不会注意的陷阱 #### 1. 虚拟机对字符串的处理 在Java中,字符串是一个非常重要的概念,它由`java.lang.String`类表示。对于字符串的处理,Java虚拟机(JVM)有一个特殊的优化机制,即*...

    Java基础复习笔记03我们不会注意的陷阱.pdf

    Java编程语言中,有一些细节和陷阱常常被开发者忽视,这些细节关系到字符串处理、编译时期优化、线程安全以及类型提升等核心概念。以下是对这些知识点的详细说明: 1. **虚拟机对字符串的处理**: Java虚拟机(JVM)...

    Java习题(一些不注意就犯的错误)

    本篇将详细探讨"Java习题(一些不注意就犯的错误)"中涉及的知识点,包括字符谜题、循环谜题、异常谜题、类谜题以及库谜题,旨在帮助你更好地理解和避免这些常见问题。 1. 字符谜题: Java中的字符处理有时会让人...

    Java中常见的陷阱题及答案

    下面我们就来深入探讨一下Java中常见的陷阱及其解决方案。 1. **找奇数的陷阱** ```java public static boolean isOdd(int i){ return i % 2 == 1; } ``` 这段代码用来判断一个整数是否为奇数,但存在一个...

    JAVA(教你如何面试+Web开发重点讲述+常见问题及解析)

    在Java编程领域,掌握核心概念和技术是至关重要的。本文将基于提供的文件信息,...通过系统性地学习和理解上述知识点,以及在面试中展示出对问题的深度思考和解决能力,将极大地提高你成为一名优秀Java开发者的可能性。

    JAVA注意事项

    在Java编程过程中,掌握一些关键的注意事项至关重要,这不仅能提高代码质量,还能避免常见的编程陷阱。以下是一些关于"JAVA注意事项"的详细说明: 1. **命名规范**:Java有严格的命名规则,类名应使用驼峰式命名,...

    java陷阱之自动装箱共2页.pdf.zip

    这个特性在提高编程效率的同时,也可能带来一些隐藏的陷阱,尤其是在性能敏感的代码中。本篇文章将深入探讨Java中的自动装箱,并分析可能遇到的问题。 自动装箱是指Java编译器自动将基本数据类型(如int、char、...

    java面试陷阱

    ### Java面试陷阱详解 #### 一、final, finally, finalize的区别 在Java中,`final`, `finally`, 和 `finalize` 这三个关键字虽然只相差一个字母,但在用途上却有着天壤之别。 - **final**: 这个关键字主要用于...

    java中注意点总结(二)

    在Java编程中,有很多细节和陷阱需要注意,尤其是在实际开发中。这篇博客“java中注意点总结(二)”虽然没有提供具体的文字内容,但我们可以根据给出的标签“源码”和“工具”,以及文件名“struts”、“web”、...

Global site tag (gtag.js) - Google Analytics