码迷,mamicode.com
首页 > 其他好文 > 详细

No.5 表达式中的陷阱

时间:2017-01-09 23:37:14      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:意思   依次   build   引用   溢出   回收   可变   不能   复合   

1. 关于字符串的陷阱

  • JVM对字符串的处理
    • String java = new String("Java"); 创建了几个对象?
      • 2个。“Java”直接量对应的字符串对象;new String()构造器返回的字符串对象
      • java.intern() 可以字符串池中的直接量对象。
    • 字符串及基本类型的包装类,Java允许通过直接量的方式来创建对应的Java对象;除此之外,简单的算术表达式、连接计算(编译时可以确定具体值)也可以直接创建对应的Java对象
    • 字符串直接量,JVM会使用一个字符串池保存,第一次使用该直接量时,会将其放在字符串池进行缓存(缓存的意思就是以后再用的话,就直接从池中取,而不会新建啦),一般情况下不会对缓存池中的字符串进行垃圾回收
    • 只要是编译时就可以确定其具体值的字符串直接量,JVM会在编译时确定其具体值,并让它指向字符串池中对应的字符串,否则,就不能利用JVM的字符串池了
      • 何为编译时确定具体值?
        • 没有方法调用;没有变量引用
        • 当然,“宏替换”的变量除外
    • String str = "hello" + “world”; 创建了几个字符串对象
      • 1个。因为在编译时就可以确定其计算后的值,因此就直接把计算后的值放到池中就好了,其它的也没有必要啊
    • 在使用字符串、基本类型包装类的对象实例时,尽量通过  直接量 来创建实例。可以少创建一个对象,提升性能。
  • String是典型的不可变类。可变字符串推荐使用StringBuilder
  • 字符串比较
    • 底层是字符串数组
    • 两个字符串左对齐,依次比较二者的每个字符

2. 表达式类型的陷阱

  表达式也是具有制定的数据类型的

  • 表达式类型的自动提升
    • 当算事表达式中含有多个基本数据类型时,整个表达式的数据类型会自动提升,提升到与表达式中最高等级操作数同样的类型。
    • 操作数的等级排列如图示

技术分享

  • 复合赋值运算符的陷阱(+=、-=、/=、...)
    • E1 op= E2 等价于  E1  = (E1的类型)(E1 op E2)
    • eg:a += 5  等价于 a = (a的类型)(a + 5)
    • 陷阱:它潜在的隐式转换  可能 导致计算结果的   高位“截断”(结果强制转换发生溢出时)

 

No.5 表达式中的陷阱

标签:意思   依次   build   引用   溢出   回收   可变   不能   复合   

原文地址:http://www.cnblogs.com/fang--/p/6266472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!