欢迎光临散文网 会员登陆 & 注册

String字符串的使用

2022-06-21 19:03 作者:虚云幻仙  | 我要投稿

/**
* String字符串的使用
*/

public class TestString {
   public static void main(String[] args) {

       String s1 = "s1";
       String s2 = new String("s2");
       //"s1"默认省略了new String()
       String s3 = "";
       //空字符串也是一个字符串,不是空的
       String s0 = null;
       // =null才是空的 这里和对象的引用一样 String引用变量s0指向null空 没有指向实际地址 没有生成新对象

       System.out.println(s1.length());
       //打印字符串s1的长度:2
       System.out.println(s3.length());
       //打印字符串s3的长度:0
       /*
       System.out.println(s0.length())会报错 NullPointerException 空指针异常
       s0指向null 没有实际对象,所以没法通过对象调用方法
        */


       /*打开String源码

       package java.lang; //String类属于java.lang包 默认载入无需import导入

       public final class String  //public完全公开 final class不可继承

       implements java.io.Serializable, Comparable<String>, CharSequence {  //implements实现三个接口,用逗号隔开

       private final char value[];  //private私有属性只能类内调用 final char只可以初始化一次之后不能更改 value[]数组

       public String() {this.value = "".value;} //无参构造器 即 new String()时赋值空字符串""的value

       "s1"属于String类对象
       String s1 = "s1";是把"s1"对象的地址赋值给s1
       String s2 = new String("s2"); 是先new一个String对象 将"s2"的value和hash赋值给String对象 再将对象的地址赋值给s2

       public int length() {return value.length;}//返回this.value.length数组的长度

   public boolean equals(Object anObject) {
   //String对Object的equals方法重写 这里形参是Object类不是String类
       if (this == anObject) {
       //比较对象地址是不是同一个对象
           return true;
       }
       if (anObject instanceof String) {
       //判断要比较的anObject是否属于String类 由于String对equals重写 所以调用重写的equals的对象this属于String类 如果要比较的对象不属于String类意味着比较双方不同类

           String anotherString = (String)anObject;
           //在确认比较对象属于String类后 由于形参编译类型是Object 这里要强转为String 才能使用String的内容

           int n = value.length;
           //计算this.value数组的长度
           if (n == anotherString.value.length) {
           //判断两字符串长度
               char v1[] = value;
               char v2[] = anotherString.value;
               int i = 0;
               while (n-- != 0) {
               //先判断n!=0 为ture的话再n--
               //如果n=0 即两个字符串都是""空字符串,跳过循环体返回ture

                   if (v1[i] != v2[i])
                   //从第0位开始比较字符
                       return false;
                   i++;
               }
               return true;
           }
       }
       return false;
   }

       public String toString() {return this;}//源toString是返回包名.类名.对象名@地址 重写后返回字符串内容

        */

   }
}

String字符串的使用的评论 (共 条)

分享到微博请遵守国家法律