A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

三:字符串的特点

1.  字符串的特点:
     1)
一旦被赋值,就不能改变。
     注意:这里指的是字符串的内容不能改变,引用可以改变。

       2)
String字面值对象和构造方法创建对象的区别

       栈--方法区常量池 String s = new String(“hello”)
        和栈--方法区常量池String s = “hello”;的区别?
        有。前者会创建2个对象,后者创建1个对象。

      3)
==:比较引用类型  比较的是地址值是否相同
       equals:比较引用类型默认也是比较地址值是否相同,
       而String类重写了equals()方法,比较的是内容是否相同。


       4)
字符串如果是变量相加,先开空间,在拼接。
       字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。

       5)
  String s1 = "hello";
  String s2 = "hel";

6)
  System.out.println(s1.compareTo(s2)); // 2
字符串会自动转换为一个字符数组。

  private final char value[];

    字符串会自动转换为一个字符数组。

  public int compareTo(String anotherString) {
          //this -- s1 -- "hello"
          //anotherString -- s2 -- "hel"

        int len1 = value.length; //this.value.length--s1.toCharArray().length--5
        int len2 = anotherString.value.length;//s2.value.length -- s2.toCharArray().length--3
        int lim = Math.min(len1, len2); //Math.min(5,3); -- lim=3;
        char v1[] = value; //s1.toCharArray()
        char v2[] = anotherString.value;

        //char v1[] = {'h','e','l','l','o'};
        //char v2[] = {'h','e','l'};

        int k = 0;
        while (k < lim) {
            char c1 = v1[k]; //c1='h','e','l'
            char c2 = v2[k]; //c2='h','e','l'
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2; //5-3=2;
   }

关于compareTo()的问题:如果比较的两个字符串长度不一样,较短的和较长的前一部分一样。
这是返回两个字符串之差。如果前一部分就不一样,就按照字典顺序比较规则返回-1,1,0

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马