Java数据类型的零碎知识

Posted 牧云文仔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数据类型的零碎知识相关的知识,希望对你有一定的参考价值。

1.  a=a+b 和 a+=b的区别

+=会有隐式的强制转换,编译不会报错

但a=a+b,如果两个byte相加,会将加数提升到int,编译会报错

  

2. String不可变(immutable)的原因

a. JVM内存中的常量池:保存在编译期间被确定并且在.class文件中(磁盘文件)的数据,包含8种基本类型、String机器数组的常量值、符号等

b. 字符串池是一个方法区里的特殊存储区域,当创建一个String,如果它已经在pool中存在,则会返回一个存在的String引用,所以多个String变量会使用同一个引用

c. 当多个String变量使用同一个引用,如果字符串不是immutable的,改变其中一个变量的引用会导致另一个变量指向错误的值

 

3. 拼接字符串

a. 运算符“+”:内部实现是StringBuilder的append()方法,每次都要new一个新的StringBuilder,效率低

b. 如果在一行代码里连续使用“+”,会直接生成String

c. concat()方法:拷贝字符串并new出String对象,效率低

d. 所以使用StringBuilder,只需要new一个StringBuilder对象,提高了效率

 

4. StringBuilder/StringBuffer:

a. 内部使用字符数组,最后new一个String对象

b. 扩容的时候有性能损耗,所以尽量可以在构造函数里指定长度

c. StringBuffer对所有方法都做了同步,是线程安全的,但是性能有损耗

d. StringBuilder不是线程安全的,但性能好,在方法内部作为局部变量,不涉及多线程,所以应该使用StringBuilder

 

以上是关于Java数据类型的零碎知识的主要内容,如果未能解决你的问题,请参考以下文章

一些零碎的小知识点(数据库)

一些零碎的小知识点(数据库)

一些零碎的小知识点(数据库)

零碎知识

day15(mysql之零碎知识)

Java基础零碎知识点总结(持续补充)