1.String不可变? final?

  • final

    • 首先因为String不可变,如果String不是final,那么就可以有子类继承String类,然后子类覆盖其方法,使得这些方法可以修改字符串,这样就违背了String的不可变性
  • 不可变原因

    • 提高效率:比如一个字符串Stirng s1= “abc”,“abc”被放到常量池里面去了,我再String s2 = "abc"并不会复制字符串“abc”,只会多个引用指向原来那个常量,这样就提高了效率,而这一前提是string不可变,如果可变,那么多个引用指向同一个字符串常量,我就可以通过一个引用改变字符串,然后其他引用就被影响了
    • 安全:string常被用来表示url,文件路径,如果string可变,或存在安全隐患
    • string不可变,那么他的hashcode就一样,不用每次重新计算了

2.String和StringBuffer和StringBuilder区别

  • string类不可变,每次修改其实是创建新的string对象,stringbuffer和stringbuilder都可变,
  • string,因为不可变所以线程安全,stringbuffer因为方法加了sychronized关键字所以线程安全,stringbuilder非线程安全,比stringbuffer效率高
  • stringbuffer和stringbuilder都继承了abstractstringbuilder类,stringbuilder适合单线程下用,效率高

3.String有重写Object的hashcode和toString()吗?只重写equals不重写hashCode会有什么问题?

4.构造形同hashcode的字符串进行攻击怎么解决?jdk7呢?

3.override,overload,overrite区别?

  • 1override,覆盖,就是对父类的方法重新进行实现,不影响父类方法的调用
  • 2overload,重载,就是一个类里面多个函数,名字一样,但是参数个数或者类型或者顺序不同,(返回值不同不起作用)
  • 3overwrite:重写,java中没有,c++中有,他对父类方法重新实现,同时屏蔽父类方法

results matching ""

    No results matching ""