zoukankan      html  css  js  c++  java
  • string学习

    来自:http://www.cnblogs.com/kkgreen/archive/2011/08/24/2151450.html

    0,new是创了两个对象,一个在堆,一个在常量池

    1,变量+字符串=自动变成堆的

    2,final变量+字符串=还是常量池

    3,final  get()+字符串=堆空间变量

    4,String a = new String("1") + new String("1"),产生了4个对象,一个“1”常量池,两个“1”堆空间,一个“11”堆空间,没有11常量池现在

    5,string使用了一个private , 没有set方法,防止在外部改变,final放在在内部改变,在维护一个数组,保持它的不可变性

    6,重写了hashCode函数,从hash值0开始,hash=31   *  hash  +  value[ i ],选31的原因,之所以选择31,是因为它是个奇素数,如果乘数是偶数,并且乘法溢出的话,信息就会丢失,因为与2相乘等价于移位运算。使用素数的好处并不是很明显,但是习惯上都使用素数来计算散列结果。31有个很好的特性,就是用移位和减法来代替乘法,可以得到更好的性能:31*i==(i<<5)-i。现在的VM可以自动完成这种优化。

    7,equal方法分析,1,比较是不是同一个引用,2,是不是string对象,3,长度是否相同,4,一个个对比

    8,compare方法,1,比较长度,2,一个个对比


    包含了intern:https://blog.csdn.net/soonfly/article/details/70147205

    文中有点理解不一样,就是java7用了intern不会产生新的常量,还是以前的

    intern后相当把引用的地方放进string池,不改变原来对象

    但已经有了这个string常量,再intern,两个是不一样的(是错误理解

    对编译期的理解:之前强记住为什么是不相等的,原来编译期就为什么处理他们不相等,在都是字面量“aa”和”bb“的时候,编译器会优化到同一个块内存,但用了变量a,编译器就帮你创了新对象,自然内存不一样

  • 相关阅读:
    IoC 中 car 对象的配置如下,现在要添加 user 对象,并且将 car 注入到 user 中,正确的配置是?
    说说 IoC 中的继承和 Java 继承的区别
    bean 的 scope 有几种类型?请详细列举。
    简单谈谈 IoC 容器的原理
    谈谈你对 Spring IoC 和 DI 的理解,它们有什么区别?
    day13-14 内置函数
    day12 生成器(重要)
    day11 闭包和迭代器
    day10 函数进阶
    day09 函数
  • 原文地址:https://www.cnblogs.com/vhyc/p/9220948.html
Copyright © 2011-2022 走看看