java string类_Java中的String类

Java中定义了String和StringBuffer两个类来封装对字符串的各种操作,存放于java.lang包中,无需导入即可直接使用它们。

一、String对象的创建及初始化。

1.使用字符串常量直接初始化:

String s1 = "Hello world!";

这样的字符串严格来讲都是String类的匿名对象,对象名称s1保存在栈内存中,而字符串“Hello world!”保存在堆内存中。

bb9ddb9fb4b75ffaf718d771b51c8c96.png

通过引用传递创建字符串对象s2:

String s2 = s1;

在第一次定义字符串的时候,在堆内存中开辟一块空间,如果之后使用直接赋值或者引用传递创建新的对象,且此内容已经存在,就不会开辟新的堆内存,而让其指向了已有的字符串内容。

a11720756a5772fcb50705623ce2b45d.png

2.使用构造方法初始化:

String s3 = new String("Hello world!");

这种方法会开辟第二块堆内存空间,其中一块将会成为垃圾,无法实现自动入池操作。

7ebd00bc6af712de21216fa4240ad6c0.png

在String类中提供了手工入池的方法:public String intern();

String s3 = new String("Hello world!").intern();

3.使用串联方式:

String s4 = "Hello"+" world!";

二、String内容的比较。

1.调用equals()方法:

String s = "Hello world!";

Boolean result= s.equals("Hello world!");

这个方法在之前已经提到过了,equals()比较字符串的内容,它会区分字符串的大小写,也有一种忽略大小写的方法:public boolean equalsIgnorecase();。

2.使用比较运算符“==”:

1 String s1 = "Hello world!";2 String s2 = "Hello world!";3 String s3 = new String("Hello world!");4 Boolean result1 = (s1==s2);//true

5 Boolean result2 = (s1==s3);//false

可以看出,“==”完成的是两个对象堆内存地址的判断,比较两个对象是否引用同一个实例,而不是真正意义上字符串内容的比较。

三、字符串一旦声明则不可改变。

String s = "Hello";

s= s + " world";

s= s + "!";

System.out.println(s);//Hello world!

从输出结果来看,字符串的内容被改变了,但实际上只是String类对象的引用改变了,开辟出额外的堆内存空间,造成大量字符串垃圾。

5e0a0f3785eeb748afe0f7ed1efa535a.png

所以,在编程过程中应尽量避免多次修改字符串内容,以免出现大量的垃圾。

***Java中使用StringBuffer类或者StringBuilder类来改变字符串内容,且不会创建新的对象。

1 StringBuffer s = new StringBuffer("Hello");2 s.append(" world!");//在结尾追加内容

3 s.insert(6, "new ");//在指定位置插入内容

4 System.out.println(s);//Hello new world!

四、String类的常用方法。

在Java中,String类中定义了大量的操作方法,下面列出了常用的部分方法:

5210df5973e0fa9b3506f2a4a12ab06e.png

其他不再详细叙述了,仅用一个例子来大体概括它们的使用:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 classDemo2 {3 String s = "Hello world!";4 public voidchartest()5 {6 System.out.println("取出第5个字符:"+s.charAt(4));//取出字符串中第5个字符

7 }8 public voidArraytest()9 {10 //字符串与字符数组相互转化

11 char data[] = s.toCharArray();//将字符串变为字符数组

12 for(int i=0;i

18 System.out.println(new String(data,6,5));//从下标为6,即第7个字符开始取5个字符

19 }20 public voidintexOftest()21 {22 //查找指定子字符串的位置

23 System.out.println("找到,该字符串位置:"+s.indexOf("w"));//从前向后查找

24 System.out.println("找到,该字符串位置:"+s.indexOf("w",4));//从指定位置开始查找

25 }26 public voidcontainstest()27 {28 //判断某字符是否存在

29 System.out.println(s.contains("d")?"该字符存在":"该字符不存在");30 }31 public voidreplacetest()32 {33 //字符串替换

34 System.out.println(s.replaceAll("l", "a"));//全部替换

35 System.out.println(s.replaceFirst("l", "a"));//替换首个

36 }37 public voidsubstringtest()38 {39 //字符串截取

40 System.out.println(s.substring(6));//截取指定位置到末尾

41 System.out.println(s.substring(0, 5)+"和"+s.substring(6,11));//截取指定范围

42 }43 public voidsplittest()44 {45 //字符串拆分

46 String data[] = s.split("o");//按指定字符全拆分

47 for(String i:data)48 {49 System.out.println(i);50 }51 String data1[] = s.split("l", 4);//拆分为指定元素个数的字符数组

52 for(String j:data1)53 {54 System.out.println(j);55 }56 }57 public voidCasetest()58 {59 //大小写转换

60 System.out.println(s.toLowerCase());//小写

61 System.out.println(s.toUpperCase());//大写

62 }63 }64 public classText{65 public static voidmain(String[] args)66 {67 Demo dm = newDemo();68 dm.chartest();69 dm.Arraytest();70 dm.intexOftest();71 dm.containstest();72 dm.replacetest();73 dm.substringtest();74 dm.splittest();75 dm.Casetest();76 }77 }

Demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值