- 浏览: 289098 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
狼子六:
已经开始用了
Java 枚举7常见种用法 -
相约的旋律:
方法一下面的"public static fianl ...
Java 枚举7常见种用法 -
kiddy2012:
...
[转载]程序员装B指南 -
fancy105:
写得很好,简单明了双全面!
Java 枚举7常见种用法 -
he_wen:
请问一下 G1算法是否在线上使用了?
Garbage First(G1) 日志分析工具
总结几个经典的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);
}
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
-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
double b = 1.9;
System.out.println((float)(a-b));
这个就能打印出结果0.1
发表评论
-
Java压缩/解压缩二进制文件
2013-02-08 13:56 5738在Java中提供Deflater和Inflater工具类来 ... -
java常用并发工具介绍
2013-02-06 23:22 1625本文主要介绍的工具包括: CountDownLa ... -
Garbage First(G1) 日志分析工具
2012-12-22 22:35 2208G1介绍:http://softbeta.iteye.com/ ... -
Spring源码阅读——Ioc初始化过程
2012-11-20 21:52 1266以web项目启动为例,介绍一下Ioc容器的初始化。 下面这个 ... -
Spring源码阅读——获得bean
2012-10-20 20:57 3191已XmlWebApplicationContext为例,从ge ... -
Spring源码阅读——BeanFactory体系结构
2012-10-10 18:10 2238以下是看代的码随笔,想到哪写到哪,没有组织逻辑,见谅见谅。 ... -
生成随机数组
2012-09-11 20:23 10861.要求生成一组n位的数字,0-9...(n个)之间的稠密集合 ... -
O(1)复杂度获得栈中的极值
2012-09-09 23:47 1295设计一个栈,O(1)复杂度实现入栈,出栈,栈中最大值,栈中最小 ... -
ubuntu12.04上编译openjdk7
2012-06-13 15:31 4907获取源码 从openjdk代码仓库获取(比较慢) ... -
jinfo 查看、设置JVM参数
2012-04-25 15:36 5151用法: # jinfo -h Usage: ... -
一些参数,弥补CMS(Concurrent Mark-Sweep)收集器的缺点
2012-03-28 21:11 1679CMS缺点:http://softbeta.iteye ... -
[转载]PrintCompilation 参数解释
2012-03-27 13:59 1549英文不好,所以就不翻译了: b Blocking co ... -
《Head First 设计模式》读书笔记
2012-03-01 11:30 15441.策略模式(Strategy) ... -
解决jrobin图像中文乱码
2012-02-14 23:31 1160目前发现一种方法可以解决,做个标记。 利用字体: RrdG ... -
Java内存管理——垃圾收集概念及特点
2012-02-03 12:37 1062碎碎念,介绍Java内存管 ... -
[转载]hotspot源码(JDK7)
2012-01-19 19:25 1563源码结构图,方便理解: ├─agent ... -
跨平台获取java进程id(Process ID in Java)
2012-01-18 19:20 9158原创地址:http://blog.lichengwu.cn/ ... -
了解CMS(Concurrent Mark-Sweep)垃圾回收器
2011-12-27 20:13 121061.总体介绍: CMS(Concurrent Mark- ... -
fail-fast
2011-12-13 19:34 1045fail-fast:快速失败 一般情况下,在对集合进行迭代( ... -
利用VisualVM监视远程JVM
2011-11-17 20:06 4719VisualVM介绍 VisualVM是集成了多个JDK命令 ...
相关推荐
Java语言在实际应用中充满了各种陷阱,这些陷阱可能在...通过深入理解和实践这些Java陷阱,不仅可以避免在编程中犯错,也能在面试中展现出专业技能,为你的职业生涯加分。不断学习和探索,使你在Java的世界里游刃有余。
然而,即便是经验丰富的开发者也可能在面试或实际工作中陷入一些“陷阱”。本资源旨在帮助Java程序员理解和避免这些常见的问题和误区。 首先,我们来探讨Java的基础方面。Java的基础包括语法、数据类型、运算符、...
下面将详细阐述文档中提到的Java编程中应注意的几个关键细节。 1. 数值表达式中的奇偶判断 在Java中,判断一个整数是否为奇数时,应避免使用i%2==1的表达式,因为当整数i为负数时,例如-1%2的结果为-1,这并不是...
"Java SCJP 陷阱大全"显然是一份集合了Java编程中常见错误、陷阱和难点的资料,旨在帮助考生或者开发者避免在实际工作中遇到这些问题。以下将详细介绍Java SCJP考试中的一些关键知识点和常见陷阱: 1. **基本语法**...
Java面试中的陷阱往往涉及到对语言核心概念的深度理解,这些陷阱涵盖了从基本语法特性到高级设计模式的应用。面试官通常会通过一些看似简单但实际上需要深入理解的问题来测试候选人的技能和经验。 首先,我们来看看...
Java编程中static和final关键字的陷阱是Java开发中两个重要的关键字,但是它们的使用也存在一些陷阱,需要开发者注意掌握。 static关键字可以用于修饰属性、方法和类。static关键字修饰的成员变量称为静态成员变量...
本文将深入探讨Java的一些值得注意的细节,帮助你避免常见陷阱,提升代码质量。 1. **自动装箱与拆箱**:Java中的`Integer`等包装类提供了自动装箱和拆箱功能,方便了开发者操作。但需要注意,虽然在基本类型和包装...
### Java基础复习笔记03:我们不会注意的陷阱 #### 1. 虚拟机对字符串的处理 在Java中,字符串是一个非常重要的概念,它由`java.lang.String`类表示。对于字符串的处理,Java虚拟机(JVM)有一个特殊的优化机制,即*...
Java编程语言中,有一些细节和陷阱常常被开发者忽视,这些细节关系到字符串处理、编译时期优化、线程安全以及类型提升等核心概念。以下是对这些知识点的详细说明: 1. **虚拟机对字符串的处理**: Java虚拟机(JVM)...
本篇将详细探讨"Java习题(一些不注意就犯的错误)"中涉及的知识点,包括字符谜题、循环谜题、异常谜题、类谜题以及库谜题,旨在帮助你更好地理解和避免这些常见问题。 1. 字符谜题: Java中的字符处理有时会让人...
下面我们就来深入探讨一下Java中常见的陷阱及其解决方案。 1. **找奇数的陷阱** ```java public static boolean isOdd(int i){ return i % 2 == 1; } ``` 这段代码用来判断一个整数是否为奇数,但存在一个...
在Java编程领域,掌握核心概念和技术是至关重要的。本文将基于提供的文件信息,...通过系统性地学习和理解上述知识点,以及在面试中展示出对问题的深度思考和解决能力,将极大地提高你成为一名优秀Java开发者的可能性。
在Java编程过程中,掌握一些关键的注意事项至关重要,这不仅能提高代码质量,还能避免常见的编程陷阱。以下是一些关于"JAVA注意事项"的详细说明: 1. **命名规范**:Java有严格的命名规则,类名应使用驼峰式命名,...
这个特性在提高编程效率的同时,也可能带来一些隐藏的陷阱,尤其是在性能敏感的代码中。本篇文章将深入探讨Java中的自动装箱,并分析可能遇到的问题。 自动装箱是指Java编译器自动将基本数据类型(如int、char、...
### Java面试陷阱详解 #### 一、final, finally, finalize的区别 在Java中,`final`, `finally`, 和 `finalize` 这三个关键字虽然只相差一个字母,但在用途上却有着天壤之别。 - **final**: 这个关键字主要用于...
在Java编程中,有很多细节和陷阱需要注意,尤其是在实际开发中。这篇博客“java中注意点总结(二)”虽然没有提供具体的文字内容,但我们可以根据给出的标签“源码”和“工具”,以及文件名“struts”、“web”、...