zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    XSS跨站脚本攻击
    TCPDUMP
    使用adb命令抓取崩溃日志
    Android ADB 5037端口被占用问题解决办法:改端口号
    Fedora 29安装 和配置
    给linux 增加软件图标
    新手上路教程5_安全管理
    shell基础笔记
    新手上路教程4_DQL语言
    MySQL 和SQLserver 创建表注释字段的差别
  • 原文地址:https://www.cnblogs.com/june0816/p/6575139.html
Copyright © 2011-2022 走看看