java数组实验心得体会_JAVA实训总结 :String

String是特殊的类,与其他基本类型并不相同,是被java封装的类型

String底层组成对象为数组与字典(字符集编码表)

String 类型的字符串是存储在JVM特别开辟的字符串常量池中

创建与修改字符串的本质

String s = "hello"并不等价于String s = new String("hello")

执行String s = "hello"代码

java会先在字符串常量池中寻找是否有hello;如果有,新建一个子串引用,将引用扔到s里,如果没有,便从字典里寻找,在字符串常量池中开辟空间新建数组,找到h放入下标为0的数组,再找到e放入下标为1的数组,依次类推,直到将hello完全存储到数组,再建立一个子串引用,将引用扔给s

但在执行String s = new String("hello")时,可能会创建一个对象,也可能会创建两个对象:

步骤:

1.String s定义一个名为s的String对象,并不创建对象

2.= 对 s初始化,将某对象赋值给他

3.“hello”通过双引号在编译期间创建对象,这个创建方法与String s = "hello"一样,先在字符串常量池中寻找是否有hello,有则不添加,没有则将hello添加到字符串常量池中

4.new String() :运行期 在堆中开辟空间,存储hello

注意:

不管串池里有没有"hello",它都会在堆中重新分配一块内存,定义一个新的对象

此时s存放的是堆中hello的地址并非字符串常量池中的地址

(String的intern()方法就是扩充常量池的 一个方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用)

例:

1 String s0 = "abc";2 String s1 = "abcd";3 String s2 = new String("abc");4 System.out.println(s0 == s2);//flase

5 System.out.println("***********************************");6 String s3 = s1+"d"; //拼接对象有new,会在堆中开辟空间

7 String s4 = "abc"+"d"; //拼接对象无new,只在常量池中进行操作

8 s2.intern(); //返回s2在常量池中的地址,常量池中若无s2则在常量池中添加s2,并返回它的地址

9 System.out.println(s0 == s2);//flase

10 System.out.println("***********************************");11 s2 =s2.intern();12 System.out.println(s0 == s2);//true

13 System.out.println(s1 == s3);//flase

14 System.out.println(s1 == s4);//trun

字符串常量池中的字符串是不可以改变的

String word = "Hello, ";

word = word.trim(); //返回一个前后不含任何空格的调用字符串的副本

String s = word.concat("小鱼儿!"); //在 “Hello,” 后面拼接 “小鱼儿!”

这时在字符串常量池中,会存在三个字符串:1."Hello, " 2."Hello," 3.”Hello,小鱼儿!“

word = word.trim(); //不会将已经建立的子串1改变,只是将新建子串2的地址赋值给了word

如果原来的那个 "Hello, "没有任何对象去引用它,虚拟机的垃圾回收机制将接收它。

字符串的比较“==”与equals()

"==":比较两个字符串的首地址,而equals()比较两个字符串的内容是否相同

String s1 = new String("abc");

String s1 = new String("abc");

System.out.print(s1 == s2);//输出flase,地址不同

System.out.print(s1.equals(s2));//输出true,内容相同

String常用方法

1.public String concat(String)

A.concat(B) //B字符串将被连接到A字符串后面

2.public int indexOf(int ch):

返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

public int indexOf(int ch, int fromIndex):

返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

int indexOf(String str):

返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

int indexOf(String str, int fromIndex):

返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

3.public String substring(int index)

提取从位置索引开始的字符串部分

public String substring(int beginindex, int endindex)

提取beginindex和endindex之间的字符串部分,注意:beginindex<=s

public String trim()

返回一个前后不含任何空格的调用字符串的副本(将字符串空格去掉)

4.public String[] split(String c)

将一个字符串根据c分割为若干子字符串,结果作为字符串数组返回,但会将分隔符去掉

String words = "长亭外,古道边,芳草碧连天,晚风拂柳笛声残,夕阳山外山";

String[] printWord = new String[100];

System.out.println("\n拆分后:");

printWord = words.split(",");

for (int i =0;i

System.out.println(printWord[i]);

}

控制台输出结果:

拆分后:

长亭外

古道边

芳草碧连天

晚风拂柳笛声残

夕阳山外山

输出后,作为分隔符的逗号消失

5.public bollean equalsIgnoreCase():

比较两个字符串,但不会区分大小写

6.toLowerCase():

将字符串中的所有大写字符改为大写字符

7.toUpperCase():

将字符串中所有小写字符串改为大写字符

将基本类型转换为String类型的简单方法:

1.最简单的方法:基本类型变量+“ ”,所有变量与String类型拼接都会转换为String类型

2. String s = String.valueOf(基本类型变量)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值