飞利浦·斯塔克|String字符串的使用

飞利浦·斯塔克|String字符串的使用

/**
* 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 = https://mparticle.uc.cn/"\".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字符串的使用】