zoukankan      html  css  js  c++  java
  • java面试之String的理解(自我理解)

    1.String是基本数据类型吗?

        不是,是对象,引用数据类型

    2.String是可变吗?

        不可变,String是final类型的.

    3.怎样比较两个字符串的值相同,怎样比较两个字符串是否为同一对象?

        比较值相同用equals,比较是否为统一对象用 == 

    4.switch中可以用String吗?

        在jdk5中switch支持枚举,在7中支持String,但是通过反编译可以看出就是本质还是int,case后是hashcode,之后使用equals进行比较,所以String的效率会比较低

    5.String str = new String("abc");这条语句创建了几个对象?为什么?

        创建了两个对象,"abc"本身就创建在常量池中,通过new又创建在堆中.

    6.String,StringBuffer,StringBuilder有什么区别?

        String是字符串常量,不可变,其余两个是可变的.StringBuffer是线程安全,但是效率较低,StringBuilder是线程不安全,但是速度较快.

    7.String.trim()方法去掉的是哪些字符?

        去掉的是首尾的空白字符.

    8.String可以被子类继承吗?

        既然是final类,肯定不能被继承.

    9.可以自定义java.lang.String类并使用吗?

        可以自定义java.langString类并编译成功,但不能被加载使用.

    10.String与byte[]如何进行相互转换?

        String->byte[] 使用String类的getBytes方法.  byte[]->String通过new String(byte[])构造器

    这里额外说一下String被设计成final的好处?

    1.缓存Hashcode,java中经常会用到字符串的哈希码,字符串的不可变保证其hashCode永远保持一致,这样可以变不必要的麻烦,每次使用字符串的hashcode不用重新计算,更加高效.

    2.安全性.String类被广泛的使用在java类中充当参数,如果字符串可变,那么网络连接,打开文件等操作可能导致安全问题,可变的字符串也可能导致反射的安全问题,因为他的参数也是字符串.

    3.不可变对象天生就是线程安全.不可变对象可以自由在线程间共享,不需要同步处理.

    总之,String类设计为不可变主要目的是为了安全和高效.

  • 相关阅读:
    常用的虚拟化产品
    KVM虚拟化
    Jenkins流水线项目发布流程
    Jenkins安装,界面说明
    敏捷估算与规划—总结
    敏捷估算与规划—跟踪与交流
    敏捷估算与规划—进度安排
    敏捷估算与规划—为价值做规划
    敏捷估算与规划—问题与目标
    用户故事与敏捷方法笔记 --- 估算与计划
  • 原文地址:https://www.cnblogs.com/wadmwz/p/8798786.html
Copyright © 2011-2022 走看看