前言:
首先呢这篇文章给初学者看的,也算是自己的学习笔记,督促自己坚持下去,所以呢大神们看不入眼的话还望海涵。
初始化
- 声明一个字符串:
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对象的引用是否指向同一个对象。
对于以上几点我们来个活生生的例子巩固一下:
以上是对于我对于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; } } }