Java——详解String类

1.实例化String类对象

有两种方式:

package m10d26;
 
public class String_1 {
 
	public static void main(String[] args) {
		//实例化方式一
		String name1="张三";
		System.out.println(name1);
		
		//实例化方式二
		String name2=new String("李四");
		System.out.println(name2);
	}
}

输出结果:

张三
李四

2."=="与"equals方法"的区别

“==” 比较的是引用(是否指向同一个内存块) ,而“equals”比较的是具体内容

package m10d26;
 
public class String_1 {
 
	public static void main(String[] args) {
	
		String name1="张三";
		String name2=new String("张三");
		String name3=name2;//传递引用,类似于指针
		System.out.println("name1==name2:"+(name1==name2));
		System.out.println("name1==name3:"+(name1==name3));
		System.out.println("name2==name3:"+(name2==name3));
		System.out.println("===============================");
		System.out.println("name1.equals(name2):"+(name1.equals(name2)));
		System.out.println("name1.equals(name3):"+(name1.equals(name3)));
		System.out.println("name2.equals(name3):"+(name2.equals(name3)));
	}
}

输出结果:

name1==name2:false
name1==name3:false
name2==name3:true
===============================
name1.equals(name2):true
name1.equals(name3):true
name2.equals(name3):true

看看内存分布情况:
在这里插入图片描述
name1和name2分别赋值为"张三",同时指向堆里面的两个相同的内存块;此时,将name2的地址传递给name3,也就是将堆里面的地址传递给name3,所以name2和name3指向同一个内存块;

" == "比较的是应用(是否指向同一个内存块);因此name2 == name3是true,其余都是假的;

".equals方法"比较的是具体内容(所指向的内存块里面的内容是否相等);因此三个内存块的内容是一样的,因此都为true;

"==“和”.equals方法"两个比较的函数的返回值都是Boolean类型的。

3.String两种实例化方式的区别

直接赋值方式:创建的对象存放到字符串对象池里,假如存在的,就不会再创建;
new对象方式:每次都创建一个新的对象;

package m10d27;
 
public class String_2 {
 
	public static void main(String[] args) {
		String name1="张三";
		String name2="张三";
		String name3=new String("张三");
		String name4=new String("张三");
		
		System.out.println("name1==name2:"+(name1==name2));
		System.out.println("name1==name3:"+(name1==name3));
		System.out.println("name3==name4:"+(name3==name4));
	}
}

输出结果:

name1==name2:true
name1==name3:false
name3==name4:false

看看内存分布情况:
在这里插入图片描述
name1和name2都指向同一个内存块;而name3和name4都是new出来的新内存块;

因此用"=="进行比较的时候name1和name2是相等的

4.字符串内容不可变

字符串的特性:不能改变字符串的内容;
要想改变,只能通过指向一个新的内存地址;

package m10d27;
 
public class String_3 {
 
	public static void main(String[] args) {
		String name="张";
		name+="三";
		
		System.out.println(name);
	}
}

输出结果:

张三

看看内存分布:
在这里插入图片描述
这里修改了name,本质的话name指向了一个新的内存区域,而原来的“张”这个内存块会被垃圾回收掉;

String类的常用方法:

  1. char chartAt(int index) 返回指定索引处的char值

这里的index 是从0开始的;

我们先上下实例:

package com.java.chap03.sec08;
public class Demo5 {
    public static void main(String[] args) {
        String name="张三";
        char ming=name.charAt(1);
        System.out.println(ming);
        String str="我是中国人";
        
        for(int i=0;i<str.length();i++){
            System.out.println(str.charAt(i));
        }
    }
}

运行输出:

  1. int length() 返回字符串的长度
  2. int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引
package com.java.chap03.sec08;
public class Demo06 {
    public static void main(String[] args) {
       
        // indexOf方法使用实例
        String str="abcdefghijdklmoqprstuds";
        
        System.out.println("d在字符串str中第一次出现的索引位置:"+str.indexOf('d'));
        
        System.out.println("d在字符串str中第一次出现的索引位置,从索引4位置开始:"+str.indexOf('d',4));
    }
}
  1. String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串
package com.java.chap03.sec08;
public class Demo07 { 
    public static void main(String[] args) {
        // substring方式读取
        String str="不开心每一天";
        String str2="不开心每一天,不可能";
        String newStr=str.substring(1);
        System.out.println(newStr);
        String newStr2=str2.substring(1, 6);
        System.out.println(newStr2);
    }
}
  1. public String toUpperCase() String 中的所有字符都转换为大写
package com.java.chap03.sec08;
public class Demo08 {
    public static void main(String[] args) {
        String str="I'm a boy!";
        String upStr=str.toUpperCase(); // 转成大写
        System.out.println(upStr);
        String lowerStr=upStr.toLowerCase(); // 转成小写
        System.out.println(lowerStr);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值