String类学习笔记



前言:

首先呢这篇文章给初学者看的,也算是自己的学习笔记,督促自己坚持下去,所以呢大神们看不入眼的话还望海涵。

初始化

  • 声明一个字符串:

String 字符串标志符;          例如:String str;

  • 声明并初始化字符串的常用方法:

String 字符串标志符=字符串;   例如:String str=”abcd”;

  • 通过构造方法构建并初始化对象:

例如:String varname=new String(“the String”);

  • 链接字符串

(因为这是我作为学生写的学习笔记,未免显low,请多包涵)

  • 首先呢是最基础的大部分人一看就知道的

“MWQ”+9412——MWQ9412

“This is ”+true——This is true

“MR”+”MWQ”——MRMWQ

100+6.4+”MR”——106.4MR

  • 接下来的呢,是我再次看课本之后才知道的

字符串操作符,如果表达式以一个字符串开头,那么后续所有操作数会被编译器转换成它们的字符串形式。

“10”+7.5F——107.5

“MR”+100+6.4——MR1006.4

“路径:”+(new java.io.File(“c:/test.txt”))——路径:c:/test.txt

接着呢我们用代码说话:

public class StringOperators {
public static void main(String[] args) {
       int x=0,y=1,z=2;
       String s="x,y,z ";
       System.out.println(s+x+y+z);//x,y,z 012
       System.out.println(x+" "+s);//0 x,y,z   s+="(summed)=";
       System.out.println(s+(x+y+z));//x,y,z (summed)=3
       System.out.println(" "+x);//0
    }
}

  • 两种创建String方法的区别:

    String s1=”abcd”;

    String s2=”abcd”;

    以上字符串初始化方法,为了减少创建字符串的数量,字符串类维护了一个字符串池,每当代码创建字符串常量时,首先检查字符串常量池,如果字符串已经存在池中就返回池中的实例引用,如果字符串不再池中就会实例化一个字符串并放到池中。

    String s3=new String(“abcd”);

    String s4=new String(“abcd”);

    以上通过构造方法构建并初始化对象,对于new出来的String对象,每new一个内存里就生成一个。

    String类比较方法

    Object类是所有java类的父类,所有java类都要继承object类,String类是默认继承object类的。Object类的equals()方法的本质是比较两个对象引用是否指向同一个对象。

    源码如下:

    public boolean equals(Object obj) {
        return (this == obj);
    }
    
    

    String类的equals方法用于比较两个字符串是否相等,返回值为true或者是false,equals方法比较两个字符串时区分大小写。

    例如:

    String str=”A”;

    Boolean b=str.equals(“a”);

    则b=false

    String类的equals方法源码如下:

    public boolean equals(Object anObject) {
       if (this == anObject) {
             return true;//如果形参对象和当前对象引用相同地址,则认为他们相等,返回true
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = count;//当前字符串的长度
            if (n == anotherString.count) { //比较当前字符串的长度于形参字符串长度是否相等
            char v1[] = value;//把当前字符串赋给数组v1
            char v2[] = anotherString.value; //把形参字符串赋给v2
            int i = offset;//从字符型数组的第一个索引开始
            int j = anotherString.offset; 
            while (n-- != 0) {                
               if (v1[i++] != v2[j++]) 
                return false;
            }      //判断如果v1和v2不能对应相等,返回false,否则返回true
           return true;
         }
      }
      return false; //如果所传对象不满足前两个if语句,则返回false
    }
    
    

    String类的equals()方法是对object类的equals方法的进行了重写。在String中“==”比较的是两个String对象的引用是否指向同一个对象。

    对于以上几点我们来个活生生的例子巩固一下:

    class Value{
        int i;
    }
     
    public class EqualsMethod {
        public static void main(String[] args) {
        String s1="abcd";
        String s2="abcd";
        String s3=new String("abcd");
        String s4=new String("abcd");
        System.out.println(s1==s2);//true
        System.out.println(s1==s3);//false
        System.out.println(s3==s4);//false
        s2=s3;//s2的引用指向s3
        System.out.println(s2==s3);//true
        Value v1=new Value();
        Value v2=new Value();
        v1.i=v2.i=100;
        System.out.println(v1.equals(v2));//false,object类的默认equals()方法
        System.out.println(v1.i==v2.i);//true
      }
    }
     
    重写equals方法
    public class Test {
        public static void main(String[] args) {
        // TODO Auto-generated method stub
        Test t = new Test();
        Object circle1=t.new Circle();
        Object circle2=t.new Circle();
        System.out.println(circle1.equals(circle2));//false 调用的是Object类的equals方法
        Circle a=t.new Circle();
        Circle b=t.new Circle();
        a.radius=100;
        b.radius=100;
        System.out.println(b.equals(a));//true 调用circle重写的equals方法
        b.radius=99;
        System.out.println(b.equals(a));//false 调用circle重写的equals方法
        Circle circle3=(Circle)circle1;//把circle1强制转换的结果赋值给circle3
        System.out.println(circle3.equals(circle1));//true circle1本身还是object类型,所以调用object类的equals方法
        }
     
        class Circle{
            double radius;
            public boolean equals(Circle circle){//重写equals方法
            System.out.println("调用Circle类的equals方法");
            return this.radius==circle.radius;
        }
      }
    }
    
    
    以上是对于我对于String类一些基本知识的见解和总结,有写的不对的地方欢迎网友们来讨论学习!小编我不胜感激。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值