• 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

  • 相关阅读:
    QQ音乐 删除历史登录设备
    mweb发布文章为什么默认TinyMCE编辑器?
    Mac 安装 Homebrew
    uniapp配置scss支持
    PHPRedis教程之geo
    CentOS7通过YUM安装NGINX稳定版本
    CentOS7通过YUM安装MySQL5.6
    更换composer镜像源为阿里云
    使用chattr禁止文件被删除
    centos 7 源码安装 mysql 5.6
  • 原文地址:https://www.cnblogs.com/june0816/p/6575139.html
Copyright © 2020-2023  润新知