• Java 字符串比较,String 中的一些方法 == 和 equals 的详解


    "==" 是比较的是两个对象的内存地址,而equals方法默认情况下是比较两个对象的内存地址.

    1.String str = "hello"  生成的字符串,首先是去检查字符串常量池中是否已经存在了这个"hello" ,若存在,就不会再创建一个新的"hello",直接返回常量池中的这个字符串地址,若不存在,那么就在字符串常量池中加入这个字符串.字符串常量池,存在于方法区中.

    2.String str =  new String("hello"),首先是在常量池中寻找是否存在这个字符串,存在则不再建立,若不存在,则建立,之后复制一份到堆内存中!在堆内存中new一个字符串,当然如果再new一个字符串,那么他们的内存地址是不同的.但是对于new出来的字符串,利用equals的时候,他们是相同的,原因是String 中重写equals的方法中,是利用字符串转为char 数组来对每一个char进行比较,最后得出去true 或者 false.     new String 一共创建两次这个对象.一个在常量池,一个在堆内存中!

    3.字符串比较技巧:

      利用"中国".equals(str) ,用常量equals,防止发生空指针异常.方法调用不为空......变量调用方法的时候不能为NULL,不然会出现空指针异常!

    4.字节数组,字符数组 与 String 的转换

        str.getBytes() , str.toCharArray()    转换为字节数组和字符数组

    5.split("-") 分隔符获取字符串内容

    6.subString (startindex , endindex)    一般都是包头不包尾,所以需要endindex加一,这样才切割完整

    7.StringBuffer 问题: 默认的构造方法是16字符,如果添加超过了16字符,那就自动增长一倍.  已经被StringBuilder代替

      String 是一开始就建立的是常量,所以不建议经常修改!如果需要频繁修改字符串内容,建议使用字符串缓冲类.是用来存储String的容器,增删查改非常方便.

      利用append 方法添加.

      sb.reverse()   调换

    8.StringBuffer 是线程安全的 (操作效率不高),  StringBuilder (操作效率高) 非线程安全,但比前快.

      推荐使用 StringBuilder   因为操作效率高!

      

      

      

  • 相关阅读:
    「USACO 2020 US Open Platinum」Exercise
    Equilateral Triangles
    [USACO 2020 February Platinum]Help Yourself
    「ICPC World Finals 2019」美丽的桥梁
    「ICPC World Finals 2019 何以伊名始
    COCI20162017 Contest#6 F
    COCI2016/2017 Contest#3 F Meksikanac
    TopCoder SRM 570 Div1 CurvyonRails
    COCI2016-2017 Contest#2 F
    UOJ Round Good Bye JiHai D. 新年的追逐战
  • 原文地址:https://www.cnblogs.com/bequt/p/5644950.html
Copyright © 2020-2023  润新知