String类

String不是基本数据类型,是Java提供的一个特殊类,也是一种特殊引用数据类型。

 

String有两种实例化的方式:

(1)String str = “Hello”;

(2)String str = new String(“Hello”);

【说明】

前者是通过直接赋值的方式实例化,会首先在“字符串池”中查找是否有”Hello”,若有则直接将str指向已存在的”Hello”,若不存在则会在堆内存中开辟存储空间来保存”Hello”,再将其在堆内存中的地址保存在str的栈内存中,在这之后要是有其他的String变量的值为”Hello”时,会将相同的地址赋给新变量。除此之外,当str的值发生变化时,不会去修改该堆内存(存储”Hello”的堆内存)中存储的内容,而是修改str栈内存的内容,只有当系统发现该堆内存(存储”Hello”的堆内存)中存储内容不再被任何对象使用时,才会启动垃圾回收机制,释放这一堆内存。

后者使用new来实例化String对象,会直接在堆内存中开辟一块空间来存储”Hello”,并将此堆内存地址赋给str的栈内存,不会考虑“字符串池”中是否存在”Hello”。

【心得】

按照上面的存储机制,相同Application中,所有通过直接赋值方法创建的,值为”Hello”的String对象,它们的栈内存中存储的内容都是一致的,都指向了堆内存中相同的位置。使用new实例化的String对象,其指向的堆内存不会被其他String对象指向,当其值发生改变或者对象被释放时,该堆内存也会被释放。

 

【举例】

String str = "Hello";

String str1 = new String("Hello");

 

if (str == str1)

{

System.out.println("step1 --- YES");

} else

{

System.out.println("step1 --- NO");

}

if (str.equals(str1))

{

System.out.println("step2 --- YES");

} else

{

System.out.println("step2 --- NO");

}

 

-----------输出结果-------------

step1 --- NO

step2 --- YES

------------------------------------

 

String对象的修改过程会产生一些中间堆内存,优化的方法是使用StringBuffer



String常用的API

1.toCharArray()    将String转化为char数组(字符数组-----字符流)

String str = “Hello”;

char[] temp = str.toCharArray();

 

2.charAt(int pos)    取出String中第pos处的char

String str = “Hello”;

char temp = str.charAt(1);

println(temp);

-----------输出结果-------------

e

------------------------------------

 

3.getBytes()   将String转化为byte数组(字节数组----字节流)

String str = “Hello”;

byte[] bs = str.getBytes();

 

4.length()    返回String对象中包含的字符数量

String str = “Hello”;

int len = str.length();

println(len);

-----------输出结果-------------

5

------------------------------------

 

5.indexOf()    返回字符串中查找的字符的位置

String str = “Helool”;

str.indexOf(“H”);    // 返回0

str.indexOf(‘H’);    // 返回0

str.indexOf(“l”);    // 返回2

str.indexOf(“l”, 3);    // 返回5

str.indexOf(“a”);    // 返回-1

 

6.split(String regex)    //String对象按照指定字符分割成为String数组

String temp = “a,b,c,d,e,f”;

String[] temps = temp.sqlit(“,”);

println(temps); // 输出数组内容

-----------输出结果-------------

a b c d e f

------------------------------------

7.toUpperCase()    将字符串全部转为大写

String temp = “heLLo”;

temp = temp.toUpperCase();

println(temp);

-----------输出结果-------------

HELLO

------------------------------------

8.toLowerCase()    将字符串全部转为小写

String temp = “HeLLo”;

temp = temp.toLowerCase();

println(temp);

-----------输出结果-------------

hello

------------------------------------

 

9.startsWith(String t) / endsWith(String t)  检测字符串开始/结尾内容

String str= “HTTP 1.1”;

Println(str.startsWith(“HTTP”));

Println(str.endsWith(“1.0”));

Println(str.endsWith(“1.1”));

-----------输出结果-------------

true

false

false

------------------------------------

 

10.equals() / equalsIgnoreCase() 字符串内容比较

(1)equals()  比较两个字符串内容是否完全一致

(2)equalsIgnoreCase()  忽略两个字符串字符大小写的情况下比较内容是否一致

 

String str = “Hello”;

String str1 = “Hello” , str2 = “heLLo”;

Println(str.equals(str1));

Println(str.equalsIgnoreCase(str2));

-----------输出结果-------------

true

true

------------------------------------

11.replaceAll(String b, String a) // 将字符串中的字符b全部替换成a

String str = “Hello”;

str = str.replaceAll(“l” , “x”);

Println(str);

-----------输出结果-------------

Hexxo

------------------------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值