JAVA小知识汇总

stackOverflow 上面有的热门问题很简单,没必要单独一个一个的都单独写为一个页面,简单汇总一下,都是一些小知识。

1 Java’s +=, -=, *=, /= compound assignment operators

1
2
short x = 3;
x += 4.6;

相当于:

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

由此可以看出来是先提升short为double,然后再把double强转short

结论:
E1 op= E2 等于 E1 = (T)((E1) op (E2)) T的类型就是E1的类型,除非E1只需要计算一次(没有转换)

2 把InputStream转换为String

使用apache commons IOUtils 包,基本2种方法:

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

或者

1
2
// NB: does not close inputStream, you can use IOUtils.closeQuietly for that
String theString = IOUtils.toString(inputStream, encoding);

3 为什么在java中存储密码的时候会使用char数组而不是String?

String 是不可变的,除了GC能回收其它你就没办法消除了,一直在内存中,如果使用String来存储密码,任何能访问java内存的都有可能看到这些密码,而char[]可以随意修改实际值,所以基本上是基于安全的考虑。

4 ArrayList怎么转Array?

new ArrayList(Arrays.asList(array))

5 怎么生成范围内的随机数?例如生成5-10之间的随机数字

如果是JDK1.7或者更新的版本:

1
2
3
4
5
import java.util.concurrent.ThreadLocalRandom;
// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
ThreadLocalRandom.current().nextInt(min, max + 1);

JDK1.7之前的版本标准做法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.Random;
/**
* Returns a pseudo-random number between min and max, inclusive.
* The difference between min and max can be at most
* <code>Integer.MAX_VALUE - 1</code>.
*
* @param min Minimum value
* @param max Maximum value. Must be greater than min.
* @return Integer between min and max, inclusive.
* @see java.util.Random#nextInt(int)
*/
public static int randInt(int min, int max) {
// NOTE: This will (intentionally) not run as written so that folks
// copy-pasting have to think about how to initialize their
// Random instance. Initialization of the Random instance is outside
// the main scope of the question, but some decent options are to have
// a field that is initialized once and then re-used as needed or to
// use ThreadLocalRandom (if using at least Java 1.7).
Random rand;
// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}

java.util.Random 通常要比java.lang.Math.random()更好。

6 LinkedList和ArrayList怎么选?

文章太长,懒得翻译了。

7 String怎么转int?

int foo = Integer.parseInt(“1234”);

问这个问题的人怎么会这么多? 文档要仔细看。

8 高效的遍历Map?

1
2
3
4
5
Map<String, String> map = ...
for (Map.Entry<String, String> entry : map.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
}

9 finally一定会执行吗?

一般都会执行,除了以下集中情况:
1、调用System.exit();
2、JVM崩溃了。
3、在try里面有死循环。
4、关电源。

10 怎么遍历一个枚举?

假设有一个枚举,如下:

1
2
3
public enum Blah {
A, B, C, D
}

怎么样通过一个String获取到枚举呢? 例如”A”获取到Blah.A?

答:Blah.valueOf(“A”) 返回 Blah.A. Blah.values()返回了所有的枚举。

转载请标示: http://hushengdong.com/2016/12/22/JAVA小知识汇总/