这是阅读JVM规范的笔记。我画了一幅图,它能帮我更好的理解JVM。
阅读全文以下是排名前10位的常见关于Java字符串的问题。
1.如何比较字符串?用”==” 还是equals()?
简单来说,如果”==”测试是相等的,那么使用 equals()也是相等的。如果你想知道这两个对象是不是相同,你应该使用equals()。
如果你知道string interning那会让你更好理解。
2.在安全敏感信息方面为什么 char[] 优于字符串?
字符串是不可变的,这意味着一旦被创建,他们将保持不变,直到垃圾回收。但是数组话,你可以明确地改变它的元素。以这种方式,安全敏感信息(如密码)将不存在于系统中的任何地方。
阅读全文该文总结了排名前10位的错误,这些都是Java开发人员经常犯的。
1.把数组转成ArrayList
把数组转成ArrayList,开发者通常这样做:
|
|
迭代器经常会出现问题,因为开发人员往往不知道它是如何工作的。下面的代码来源是ArrayList的源码:
最常见的问题是抛出java.util.ConcurrentModificationException异常。这异常实际通常是由remove方法抛出。当remove()调用是应该在 next()调用之后调用。如果remove()在next()调用之前调用,arraylist 的容量改变了,modCount != expectedModCount条件不满足,ConcurrentModificationException 异常就产生了。
阅读全文这篇文章是讨论如何解决ArrayList的java.util.ConcurrentModificationException异常问题。
错误的提示信息一般如下:
|
|
通常,Map是一种数据结构,用来存储键值对的,每个key只能在map中出现1次。这篇文章总结了9个 Map 和其子类很常见的问题。简单起见,例子中我将会使用泛型。因此,我将只考虑常规的map,而不是特定的map。但是你可以假设K和V都可以比较,那意味着K和V都继承了Comparable接口。
1. 把Map转换成List
在Java中,Map提供了3中集合视图:key set,value set,和 key-value set。他们都能使用addAll()转换成为List。下面的代码片段展示了如何从map构建一个ArrayList。
|
|
你可能知道一个无界的通配符数组如Set<?>
能容纳任何类型的元素,同样一个原始的Set也可以。那它们之间有什么不同呢?
关于Set<?>
的两个事实
这是两个关于Set<?>
的事实:
- 第一条:因为是用了?来代表任何类型,所以
Set<?>
可以容纳任何类型的元素。 - 第二条: 因为我们不知道?是什么类型,所以我们不能把任何类型放入
Set<?>
。
所以Set<?>
可以容纳任何类型的元素(满足第一条)。但是我们不能放入任何元素(满足第二条)。这两个条件冲突了吗?当然没有。下面用两个例子来说明: