zoukankan      html  css  js  c++  java
  • JDK源码阅读-------自学笔记(十一)(java.lang.String包装类)

    核心要点

    • String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”
    • String的核心就是char[]字符串,外部写的string对象,都会放入char[]字符串中
    • char[] 数组被final限制是一个常量,所以只能赋值一次,这便是把char成为不可变量原因之一
    • 看到的字符串变化,都是方法内新建的对象,新建的对象进行的重新赋值

    源码:

    1 public final class String
    2     implements java.io.Serializable, Comparable<String>, CharSequence {
    3     /** The value is used for character storage. */
    4     private final char value[];
    5         
    6         ....
    7     }
    View Code

    新建对象

     1 public String substring(int beginIndex, int endIndex) {
     2         if (beginIndex < 0) {
     3             throw new StringIndexOutOfBoundsException(beginIndex);
     4         }
     5         if (endIndex > value.length) {
     6             throw new StringIndexOutOfBoundsException(endIndex);
     7         }
     8         int subLen = endIndex - beginIndex;
     9         if (subLen < 0) {
    10             throw new StringIndexOutOfBoundsException(subLen);
    11         }
    12         return ((beginIndex == 0) && (endIndex == value.length)) ? this
    13             
    14             // 新建对象
    15                 : new String(value, beginIndex, subLen);
    16     }
    View Code

    比较的使用方式

    • '=='进行String对象之间的比较 '=='是两个对象之间进行比较,这里比较需要使用equals进行比较 编译器优化:
      1  //相当于stringValue = "hello java";
      2         String stringValue= "hello" + " java";
      3         String stringValueNew= "hello java";
      4         //true
      5         System.out.println(stringValue == stringValueNew);
      View Code

    异常代码:

    1  String stringValueNew = "hello java";
    2 
    3         String helloString = "hello";
    4         String javaString = "java";
    5 
    6         //编译的时候不知道变量中存储的是什么,所以没办法在编译的时候优化
    7         String finalString = helloString + javaString;
    8         //false
    9         System.out.println(finalString == stringValueNew);
    View Code

    注: 

        字符串比较一定要使用equals方法

    String其他方法是用请参见: (https://www.cnblogs.com/liuyangfirst/p/12316114.html "String方法使用详情")

  • 相关阅读:
    Python异常处理详解
    Python with/as和contextlib上下文管理使用说明
    Python面向对象基础:编码细节和注意事项
    搞懂Python的类和对象名称空间
    Python丢弃返回值
    Python面向对象基础:设置对象属性
    python的dir()和__dict__属性的区别
    Go Web:RESTful web service示例
    Go处理json数据
    json数据格式说明
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/12829282.html
Copyright © 2011-2022 走看看