Stackoverflow上人气最旺的10个Java问题

1、 为什么两个(1927年)时间相减得到一个奇怪的结果?

(3623个赞)

如果执行下面的程序,程序解析两个间隔1秒的日期字符串并比较:

01 public static void main(String[]
args) 
throws ParseException
{
02     SimpleDateFormat
sf = 
new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss"
); 
03     String
str3 = 
"1927-12-31
23:54:07"
04     String
str4 = 
"1927-12-31
23:54:08"
05     Date
sDt3 = sf.parse(str3); 
06     Date
sDt4 = sf.parse(str4); 
07     long ld3
= sDt3.getTime() /
1000
08     long ld4
= sDt4.getTime() /
1000;
09     System.out.println(ld4-ld3);
10 }

输出是:

1 353

为什么 ld4-ld3 不是1(因为我希望这两个时间差是一秒),而是353?

如果将日期字符串各加一秒:

1 String
str3 = 
"1927-12-31
23:54:08"
2 String
str4 = 
"1927-12-31
23:54:09"
;

ld4-ld3 的结果是1.

1 sun.util.calendar.ZoneInfo[id="Asia/Shanghai",
2 offset=28800000,dstSavings=0,
3 useDaylight=false,
4 transitions=19,
5 lastRule=null]
6  
7 Locale(Locale.getDefault()):
zh_CN

解决方案

这是上海时区,在12月31日有一个变化。

查阅这个网址来了解上海在1927年时区变化的细节。基本上在1927年年底的午夜,始终会回拨5分52秒。所以“1927-12-31
23:54:08”实际上发生了两次,看起来Java解析了后一次的时间作为当地的日期和时间导致了差异。

2、Java是“引用传递”还是“值传递”?

(2480个赞)

我一直认为Java是引用传递;然而,我看了一堆博客(例如这篇)声称不是这样的。我认为我没有理解它们之间的区别。

给个解释?

解决方案

Java一直是值传递。不幸的是,他们决定把指针叫做引用,因此新人总是被搞晕。因为这些引用也是通过值传递的。

3、一个关于Java += 操作符的问题

(2223赞)

直到今天我认为这个例子:

1 i
+= j;

只是一个简写的:

1 i
= i + j;

但如果这样做:

1 int i
5;
2 long j
8;

然而 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

[...] 下面的代码是正确的:

1 short x
3;
2 x
+= 
4.6;

x的结果等于7,因为它等价于:

1 short x
3;
2 x
= (
short)(x
4.6);

换句话说,你的假设是正确的。

4、HashMap 和 Hashtable 之间的不同?

(1769个赞)

Java中 HashMap 和 Hashtable的不同是什么?

非多线程应用中使用哪个更有效率?

解决方案

Java 中 HashMap 和 HashTable 有几个不同点:

  1. Hashtable 是同步的,然而 HashMap不是。
    这使得HashMap更适合非多线程应用,因为非同步对象通常执行效率优于同步对象。
  2. Hashtable 不允许 null 值和键。HashMap允许有一个 null 键和人一个 NULL 值。
  3. HashMap的一个子类是LinkedHashMap。所以,如果想预知迭代顺序(默认的插入顺序),只需将HashMap转换成一个LinkedHashMap。用Hashtable就不会这么简单。

因为同步对你来说不是个问题,我推荐使用HashMap。如果同步成为问题,你可能还要看看ConcurrentHashMap

5、(如何) 读取或者把一个 InputStream 转成一个
String

(1724个赞)

如果你有一个 java.io.InputStream 对象,如处理这个对象并生成一个字符串?

假定我有一个 InputStream 对象,它包含文本数据,我希望将它转化成一个字符串(例如,这样我可以将流的内容写到一个log文件中)。

InputStream 转化成 String 最简单方法是什么?

解决方案

使用 Apache commons IOUtils库来拷贝InputStream到StringWriter是一种不错的方式,类似这样:

1 StringWriter
writer = 
new StringWriter();
2 IOUtils.copy(inputStream,
writer, encoding);
3 String
theString = writer.toString();

甚至

1 //
NB: does not close inputStream, you can use IOUtils.closeQuietly for that
2 //
注意:不关闭inputStream,你可以使用 IOUtils.closeQuietly
3 String
theString = IOUtils.toString(inputStream, encoding);

或者,如果不想混合Stream和Writer,可以使用 ByteArrayOutputStream。

6、为什么Java中的密码优先使用
char[] 而不是String?

(1574个赞)

在Swing中,密码字段有一个getPassword()(返回 char数组)方法而不是通常的getText()(返回String)方法。同样的,我遇到过一个建议,不要使用 String 来处理密码。

为什么String涉及到密码时,它就成了一个安全威胁?感觉使用char数组不太方便。

解决方案

String是不可变的。这意味着一旦创建了字符串,如果另一个进程可以进行内存转储,在GC发生前,(除了反射)没有方法可以清除字符串数据。

使用数组操作完之后,可以显式地清除数据:可以给数组赋任何值,密码也不会存在系统中,甚至垃圾回收之前也是如此。

所以,是的,这是一个安全问题 – 但是即使使用了char数组,仅仅缩小了了攻击者有机会获得密码的窗口,它值针对制定的攻击类型。

7、遍历HashMap的最佳方法

(1504个赞)

遍历HashMap中元素的最佳方法是什么?

解决方案

这样遍历entrySet

1 public static void printMap(Map
mp) {
2     Iterator
it = mp.entrySet().iterator();
3     while (it.hasNext())
{
4         Map.Entry
pair = (Map.Entry)it.next();
5         System.out.println(pair.getKey()
"
= "
 +
pair.getValue());
6         it.remove(); //
avoids a ConcurrentModificationException
7     }
8 }

更多请查阅Map

8、(如何)从数组创建ArrayList

(1468个赞)

我有一个数组,初始化如下:

1 Element[]
array = {
new Element(1), new Element(2), new Element(3)};

我希望将这个数组转化成一个ArrayList类的对象。

解决方案

1 new ArrayList<Element>(Arrays.asList(array))

9、产生一个Java的内存泄露

(1478个赞)

我有过一个面试,被问到如何产生一个Java内存泄露。不用说,我感到相当傻,甚至如何产生一个的线索都没有。

那么怎么才能产生一个内存泄露呢?

解决方案

在纯Java中,有一个很好的方式可以产生真正的内存泄露(通过执行代码使对象不可访问但仍存在于内存中):

  1. 应用产生一个长时间运行的线程(或者使用一个线程池加速泄露)。
  2. 线程通过一个(可选的自定义)类加载器加载一个类。
  3. 该类分配大内存(例如,new byte[1000000]),赋值给一个强引用存储在静态字段中,再将它自身的引用存储到ThreadLocal中。分配额外的内存是可选的(泄露类实例就够了),但是这样将加速泄露工作。
  4. 线程清除所有自定义类的或者类加载器载入的引用。
  5. 重复上面步骤。

这样是有效的,因为ThreadLocal持有对象的引用,对象持有类的引用,接着类持有类加载器的引用。反过来,类加载器持有所有已加载类的引用。这会使泄露变得更加严重,因为很多JVM实现的类和类加载都直接从持久带(permgen)分配内存,因而不会被GC回收。

10、使用Java在一个区间内产生随机整数数

(1422个赞)

我试着使用Java生成一个随机整数,但是随机被指定在一个范围里。例如,整数范围是5~10,就是说5是最小的随机值,10是最大的。5到10之间的书也可以是生成的随机数。

解决方案

标准的解决方式(Java1.7 之前)如下:

1 import java.util.Random;
2  
3 public static int randInt(int min, int max)
{
4  
5     Random
rand;
6     int randomNum
= rand.nextInt((max - min) + 
1)
+ min;
7  
8     return randomNum;
9 }

请查看相关的JavaDoc。在实践中,java.util.Random 类总是优于java.lang.Math.random()

时间: 2024-09-23 19:38:04

Stackoverflow上人气最旺的10个Java问题的相关文章

网络上人气最旺的100个论坛排名

中介交易 SEO诊断 淘宝客 云主机 技术大厅 网络上人气最旺的100个论坛排名: 000013 001 http://people.sina.com.cn/forum.html 新浪网论坛 000015 002 http://club.sohu.com/ 搜狐社区 000020 003 http://bj.163.com/ 网易北京社区 000043 004 http://bbs.tom.com/bbs.php TOM海云天论坛 000143 005 http://bbs.china.com/

多玩YY:人气最旺演员月入2万美元 互联网创业新样本

YY CEO李学凌(前排左二)与员工在一起 导语:美国<福布斯>杂志网络版今天发表署名托米奥·杰龙(Tomio Geron)的文章称,尽管被誉为"山寨大国",但在中国互联网行业,仍有一些企业在默默创新.多玩YY就是其中的典型样本,该公司凭借多样化的收入来源和独特的产品模式吸引了大量用户,并有望在国际市场大展拳脚. 以下为文章全文: 不急于上市 在多数西方人眼中,中国科技行业缺乏有创意的创业公司.由此推断,中国最主要的科技产品都是Groupon.Twitter和Pintere

DELPHI人气不旺啊,DELPHI真的快过时了吗。。。

问题描述 DELPHI人气不旺啊,DELPHI真的快过时了吗...VB.net都要强啊.... 解决方案 解决方案二:微软是大势所趋解决方案三:微软是大势所趋解决方案四:微软是大势所趋解决方案五:什么叫做过时?解决方案六:delphi7俺还是偶尔用...解决方案七:不是快过时,是早就过时了.解决方案八:我还在用Delphi5解决方案九:任何语言都不会过时 都有可借鉴的东西解决方案十:社会培训这个的人少了,做的人也就少了,自学的本来就少.解决方案十一:你去网上看看开发传奇或者传世私服服务器端就知道

网上商城要先将人气做旺

广州王府井(600859,股吧)网上商城女士服装只有40款 本报讯 (文/记者林晓丽)"太不可思议了,广州王府井的网上商城商品少得可怜,女士衣服加起来总共才40款!"昨日,张小姐向记者抱怨道. 记者了解到,目前,网购的消费群体越来越庞大,传统的百货公司也纷纷涉足电子商务,欲分一杯羹.但是,相比专业网购平台,百货公司的网上商城在品类.价格方面暂无优势,相比线下的强势,其网上商城显得很冷清. 品种少 价格无优势 记者浏览了多个本土"网上百货",发现可以选择的商品很少,而

广州人气最旺的天河城飞扬电影院成了黄牛党集散地

不知何时起,广州人气最旺的天河城飞扬电影院成了"黄牛党"集散地.每逢周末,许多"黄牛"都在兜售便宜的电影票兑换券. 为减少损失,飞扬电影院管理者只好在影院售票台附近用围栏划分出一个区域,让保安维持秩序,严禁"黄牛党"入内交易. "这些'黄牛党'所出售的电影兑换券,90%以上都是来自于团购."艾媒咨询CEO张毅昨日对<第一财经日报>说,团购网的确能为一些商家带来一些大订单,但粗放经营也直接损害了商家和消费者的利益,导

南京软博会:体感游戏人气最旺

体感游戏 电子书包 现场动漫模仿 刘浏 摄 本报讯 "今年的软博会比去年更加精彩,欢迎广大市民前来参观体验,"在昨日的软博会展会现场,现场总指挥.南京市副市长罗群特意发出邀请.记者了解到,这次软博会将一直持续到9月8日闭幕,市民可凭身份证或工作证登记后免费参观.现场还有电子产品特卖区. 电子书包:网上做作业 台湾展区有个智能教室,课桌上的一个个平板电脑格外显眼,工作人员介绍,这是一个厂商推出的 "电子书包", 它们内置很多基础课程软件和一点通翻译软件."用

人气不旺严重亏损 地方网站社区发展路在何方

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 买菜.吃饭.美容.休闲.洗衣.缴费--几乎所有你能想到的社区配套服务,只要走进一个个网络社区 全部都差不多的分类.近两年,"商业化"作为一个全新的社区赚钱模式 正在越来越多的受到关注,6 1的天津的小鱼社区的事件,似乎在提醒的大家什么.而本地化社区所带来的便捷,是大家需要的.网络上,无数的社区因经营不善已倒闭了,原来喜欢去

综述:春晚网络流行语满天飞小虎队人气最旺

六大名嘴宣布春晚正式开始. 从冯巩的小品开始,去年一年的流行语不断在节目中出现. 王菲的复出不负众望. 小虎队的登场造成了当晚最大的高潮. 网易娱乐2月14日报道(文/梅子笑)除夕之夜,2010央视春晚如期直播.今年的春晚与往届相比,"直播"特点更加明显:黄宏与金玉婷的节目没有经过任何一次彩排直接进入直播,且取得了良好的现场效果:冯巩的相声剧<一句话的事儿>也把最新国足3比零战胜韩国队的胜利加入台词之中:不少演员的服装与最后彩排并不相同.整台节目更加年轻化.时尚化.网络化,

记一次在StackOverFlow上问问题的经历

最近一直在做测试方面的事情,被测的一些功能需要连接到FTP服务器上.而我在做本地测试时为了方便,就使用java写了一个简单的ftp服务器,可以在命令行下直接启动运行. 当时在main函数里是这样写的. 1 2 3 4 5 6 7 public class App { public static void main(String[] args) { FtpServer ftpServer = new FtpServer(); ftpServer.start(); } } 然后在命令行运行java