(3623个赞)
如果执行下面的程序,程序解析两个间隔1秒的日期字符串并比较:
输出是:
为什么 ld4-ld3 不是1(因为我希望这两个时间差是一秒),而是353?
如果将日期字符串各加一秒:
ld4-ld3 的结果是1.
这是上海时区 , 在12月31日有一个变化。
查阅 这个网址 来了解上海在1927年时区变化的细节。基本上在1927年年底的午夜,始终会回拨5分52秒。所以“1927-12-31 23:54:08”实际上发生了两次,看起来Java解析了后一次的时间作为当地的日期和时间导致了差异。
2、 Java是“引用传递”还是“值传递”?
(2480个赞)
我一直认为Java是 引用传递 ;然而,我看了一堆博客(例如 这篇 )声称不是这样的。我认为我没有理解它们之间的区别。
给个解释?
Java一直是 值传递 。不幸的是,他们决定把指针叫做引用,因此新人总是被搞晕。因为这些 引用 也是通过值传递的。
3、一个关于 Java += 操作符 的问题
(2223赞)
直到今天我认为这个例子:
只是一个简写的:
但如果这样做:
然而 i = i + j; 没法编译,而 i += j; 就可以编译。
这意味着 i += j;
实际上是 i = (type of i) (i + j)
的简写么?
解决方案
总有人问这类问题,JLS里有答案。参见 §15.26.2复合赋值运算符 。摘录:
E1 op= E2 型的复合赋值表达式等价于 E1 = (T)((E1) op (E2)),这里 T 是 E1 的类型,不同的是 E1 只计算一次。
一个例子,引自 §15.26.2
[...] 下面的代码是正确的:
x的结果等于7,因为它等价于:
换句话说,你的假设是正确的。
(1769个赞)
Java中 HashMap
和 Hashtable的不同是什么?
非多线程应用中使用哪个更有效率?
Java 中 HashMap 和 HashTable 有几个不同点:
Hashtable
是同步的,然而 HashMap
不是。 这使得HashMap更适合非 多 线程应用,因为非同步对象通常执行效率优于同步对象。
Hashtable 不允许 null 值和键。HashMap允许有一个 null 键和人一个 NULL 值。
HashMap的一个子类是 LinkedHashMap。所以,如果想预知迭代顺序(默认的插入顺序),只需将HashMap转换成一个LinkedHashMap。用Hashtable就不会这么简单。
因为同步对你来说不是个问题,我推荐使用HashMap。如果同步成为问题,你可能还要看看 ConcurrentHashMap。
(1724个赞)
如果你有一个 java.io.InputStream 对象,如处理这个对象并生成一个字符串?
假定我有一个 InputStream
对象,它包含文本数据,我希望将它转化成一个字符串(例如,这样我可以将流的内容写到一个log文件中)。
InputStream
转化成 String 最简单方法是什么?
使用 Apache commons IOUtils库来拷贝InputStream到StringWriter是一种
不错的方式,类似这样:
甚至
或者,如果不想混合Stream和Writer,可以使用 ByteArrayOutputStream。
1 2 下一页 >> 查看全文
内容导航
原文: Stackoverflow上人气最旺的10个Java问题(1) 返回开发首页