- 浏览: 282902 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
狼子六:
已经开始用了
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 5685在Java中提供Deflater和Inflater工具类来 ... -
java常用并发工具介绍
2013-02-06 23:22 1572本文主要介绍的工具包括: CountDownLa ... -
Garbage First(G1) 日志分析工具
2012-12-22 22:35 2145G1介绍:http://softbeta.iteye.com/ ... -
Spring源码阅读——Ioc初始化过程
2012-11-20 21:52 1222以web项目启动为例,介绍一下Ioc容器的初始化。 下面这个 ... -
Spring源码阅读——获得bean
2012-10-20 20:57 3128已XmlWebApplicationContext为例,从ge ... -
Spring源码阅读——BeanFactory体系结构
2012-10-10 18:10 2172以下是看代的码随笔,想到哪写到哪,没有组织逻辑,见谅见谅。 ... -
生成随机数组
2012-09-11 20:23 10241.要求生成一组n位的数字,0-9...(n个)之间的稠密集合 ... -
O(1)复杂度获得栈中的极值
2012-09-09 23:47 1204设计一个栈,O(1)复杂度实现入栈,出栈,栈中最大值,栈中最小 ... -
ubuntu12.04上编译openjdk7
2012-06-13 15:31 4832获取源码 从openjdk代码仓库获取(比较慢) ... -
jinfo 查看、设置JVM参数
2012-04-25 15:36 5107用法: # jinfo -h Usage: ... -
一些参数,弥补CMS(Concurrent Mark-Sweep)收集器的缺点
2012-03-28 21:11 1640CMS缺点:http://softbeta.iteye ... -
[转载]PrintCompilation 参数解释
2012-03-27 13:59 1510英文不好,所以就不翻译了: b Blocking co ... -
《Head First 设计模式》读书笔记
2012-03-01 11:30 15121.策略模式(Strategy) ... -
解决jrobin图像中文乱码
2012-02-14 23:31 1120目前发现一种方法可以解决,做个标记。 利用字体: RrdG ... -
Java内存管理——垃圾收集概念及特点
2012-02-03 12:37 1017碎碎念,介绍Java内存管 ... -
[转载]hotspot源码(JDK7)
2012-01-19 19:25 1501源码结构图,方便理解: ├─agent ... -
跨平台获取java进程id(Process ID in Java)
2012-01-18 19:20 9097原创地址:http://blog.lichengwu.cn/ ... -
了解CMS(Concurrent Mark-Sweep)垃圾回收器
2011-12-27 20:13 120231.总体介绍: CMS(Concurrent Mark- ... -
fail-fast
2011-12-13 19:34 1015fail-fast:快速失败 一般情况下,在对集合进行迭代( ... -
利用VisualVM监视远程JVM
2011-11-17 20:06 4613VisualVM介绍 VisualVM是集成了多个JDK命令 ...
相关推荐
里面介绍了一些java的常见疑惑与陷阱,让我们注意到一些以前没有察觉到的不良设计或习惯,提高代码质量
Java基础复习笔记03我们不会注意的陷阱
Java基础复习笔记03我们不会注意的陷阱.pdf
注意对象的通用方法,类的设计陷阱.pdf
我们在使用模式的时候,一定要注意模式的意图(intent),而不 要过多的去关注模式的实现细节,因为这些实现细节在特定情况下,可能会发生一些改变。不要顽固地认为设计模式一书中的类图或实现代码就代表了模式本身...
4.4.5 避免在经常调用的方法、循环中创建Java对象 4.4.6 缓存经常使用的对象 4.4.7 尽量不要使用finalize方法 4.4.8 考虑使用SoftReference 4.5 小结 第5课 表达式中的陷阱 5.1 关于字符串的陷阱 5.1.1 JVM...
java版商城源码你好二郎! 这些是我在学习过程中关于 Erlang 的笔记和主要引用。 检查部分以查看我从哪里获取报价。 请注意,此 repo 始终在进行中。 (我还没找到时间完成这本书。) 话题 陷阱 erlang 没有null值...
Cinch-使MVC变得容易的注释 关于 Cinch使Swing中的MVC变得容易。... 信不信由你,这是一个完整的Swing程序(请注意,缺少匿名侦听器对象) 提供了完整的源代码: public class IntroCinchMVC { public stati
2. 同步代码块中涉及到同步监视器和共享数据,谈谈你对同步监视器和共享数据的理解,以及注意点 同步监视器:可以是任意一个对象,但必须唯一,即多个线程共用同一把锁 共享数据:多个线程共用的数据 sleep()和wait...
ff和ie6下都是同样的运行结果,看来不是bug,那究竟是为什么呢? 注意到:对象方法访问其对象的属性时|必须|加以this.(和java不一样).
初始化子模块:git submodule update --init --recursive 设置工作区:gradlew setupCauldron 构建二进制文件:gradlew buildPackages 注意:所有二进制文件都将在发行版文件夹中支撑大锅单击此处向单击此处 [成为 ...
构建二进制文件:gradlew buildPackages 注意:所有二进制文件都将在发行版文件夹中 支撑大锅 单击此处向单击此处 [成为 Patreon] ( ) 顶级赞助人 伊西利登 爱奥尼克 陷阱 詹姆斯考恩斯 顺丰传媒 什米布 剖析 我们...
C++里函数可以设置缺省参数,Java不可以,只能通过重载的方式来实现,python里也可以设置默认参数,最大的好处就是降低函数难度,函数的定义只有一个,并且python是动态语言,在同一名称空间里不能有想多名称的函数,...
Button 中的setLayoutParams使用注意: layout文件夹和raw文件下面的文件读取 Matrix方法中的set方法和post方法 android 中调用drawBitmap时理解dip(屏幕密度)和px(像素)的区别 SQLiteDatabase 的...
针对碰到的大量陷阱,提出注意点,并对编写生产可用的sdk提供参考建议。 本设计(语言基于C++)是基于官方C版Client库而写,对于golang、java及其它语言均有借鉴意见。 由于竞业协议,代码不便公开,请谅解。 实现了...