java 之String 类对象学习总结

字符串篇
1.1 认识字符串:
字符串的本质是字符(char)类型数组,在java中则将字符串视为String类的一个实例,也就是程序中的对象。
1.2 String类
由字符所组成的一串文字和符号被称做字符串。例如Hello这个字符串是由H、e、l、l、o这5个字符所组成。在java中字符串不仅仅是字符数组,而且是String 类的一个实例。可以使用String类构造。可以使用下面的方式声明一个字符串的引用名称,并指向一个字符串实例。
String text=”Hello”;
System.out.println(text);
注意:字符串的直接指定必须用””括起来,字符串的每个字符都是使用Unicode字符构造的。在构造一个字符串对象之后,可以在输出(out)中指定字符串对象的引用名称来输出字符串。
字符串的连接在java中使用”+”运算符号,+号本来是加法运算符号,而它被重写(override)可以 直接用于字符串的连接。例如:
String msg=”你好”;
msg =msg+”java”;
System.out.println(msg)

字符串在java中是以String 类的一个实例存在的。每个字符串本身会有几个可操作的方法。
方法 说明
length() 返回字符串的字符长度
equals() 判断原字符串的字符是否等于指定字符串中的字符
toLowerCase() 转换字符串的英文字符为小写
toUpperCase() 转换字符串的英文字符为大写

如果要将输入的字符串转换为整数,浮点数等数据类型,可以使用下面所提供的静态的方法。

方法 说明
Byte.parseByte(String) 把字符串转换为字节
Short.parseShort(String) 把字符串转换为short整数
Integer.parseInt(String) 把字符串转换为 int整数
Long.parseLong(String) 把字符串转换为 long 整数
Float.parseFloat(String) 把字符串转换为 Float 浮点数
Double.parseFloat(String) 把字符串转换为 Double 浮点数

如果指定的字符串无法转换为数据类型的值,则会发出NumberFormatException异常(格式转换异常)。

String str=”abc”;

这样声明看起来像基本数据类型的声明。但String 类并不是 java的基本数据类型。String 类是java.lang下所提供的类。如果以配置对象的角度来声明字符串。如下:
String str=new String(“hello”);
由于字符串的本质是字符数组。所以使用String 类声明字符串。该字符串具有数组索引的性质。

方法 说明
char charAt(int index) 返回指定索引处的字符
int indexOf(int ch) 返回指定字符第一个找到的索引位置
int indexOf(String str) 返回指定字符串第一个找到的索引位置
int lastIndexOf(int ch) 返回指定字符最后一个找到的索引位置
String substring(int beginIndex) 取出指定索引处至字符串尾端的子字符串
String substring(int beginIndex,int endIndex) 取出指定索引范围的子字符串
Char[] toCharArray() 将字符串转换成字符数组


在构造字符串对象时,除了直接在=后使用”” 来指定字符串常数。也可以使用字符数组来构造。例如:
Char[] name={‘H’,’e’,’l’,’l’,’o’};
String str=new String(name);

除了上面介绍的几个方法,还有很多。这里就不一一总结了。应该学会使用API。例如String类还有个endsWith()方法可以判断字符串是不是以指定的字符做为结尾,可以使用这个方法来过滤文件名称


public class FileFilter
{
public static void main(String [] args)
{
String [] filename=

{"bush.jpg","aa.jpg","file.gif","bb.gif"};
System.out.println("过滤jpg文件");
for(int i=0;i<filename.length;i++)
{
if(filename.endsWith("jpg"))
{
System.out.print(filename+" ");
}
}


}

}
1. 3 不可变字符串
在java 中使用字符串最重要的一个规则必须记住,一个字符串对象一旦被创建,它的内容就是固定不变的
String str=”Hello”;
这个声明会创建一个长度为5,内容为Hello的字符串对象,您无法改变这个字符串对象的内容。
String str=”ni”;
str = “nihao”;
不要以为这样就改变了字符串对象的内容
事实上。上面那段代码中产生了两个字符串对象,一个是ni字符串对象,长度为2;一个是nihao字符串对象,长度为5,两个不同的字符串对象。您不不是在ni 字符串后面加上hao字符串,而是让str 引用名称从新引用nihao字符串,而不在引用ni 字符串但ni字符串在内存中还是存在的,只是现在没有被引用。

str(引用名称) → ni
使用=重新指定


→ ni
str(引用名称)→ nihao

java中,使用”=”将 一个字符串对象指定给一个引用名称,其意义是:改变该名称所引用的对象,原来被引用的字符串对象若没有被其他名称引用,就会在适当的时候被Java的垃圾回收机制回收

在java执行时会维护一个String池(pool).对于一些可以共享的字符串对象,会先在String 池查找是否存在相同String 内容(字符相同)。如果有就直接返回,而不是直接创建一个新String 对象,可以减少内存的消耗。如下:

String str1=”Hello”;
String str2=”Hello”;
System.out.println(str1==str2);
返回true;
上面这段代码实质上是指向同一个字符串对象

str1→Hello
str2→Hello
*注意:声明字符串的方式必须是 引用名称=”字符串对象” ,该字符串就会放在String池

在java中如果==被使用于两个引用名称时,它是用于比较两个引用名称是否指向同一个对象。

在来看看关于String 的 intern() 方法。来看下API怎么说的:在intern()方法被调用时,如果池中已经存在相同的String 对象(即内容相同),那么会返回池中的字符串对象。如果不存在,调用intern()方法的字符串对象被加入池中,并返回该对象的引用。
String str1=”fly”;
String str2=”weight”;
String str3=”flyweight”;
String str4=null;
str4=str1+str2;
System.out.println(str3==str4);

str4=(str1+str2).intern();
System.out.println(str3==str4);

来分析下上面的代码:在java使用+连接字符串会产生一个新的字符串对象,所以第一次在比较str3==str4结果为false,因为它们引用不同的对象

str1→fly;
str2→weight
str3→flyweight;

str4→flyweight;

使用intern() 方法时会先检查String 池 是否存在字符部分相同字符串对象。如果有就返回,由于intern() 在 String 池 找到了它,所以直接返回。这时候在比较 str3和str4 指向同一个字符串对象。所以结果会是true.

由上面例子也得出一个结论那就是。在java中使用==是比较两个引用名称是否引用同一个对象.不可以用==来比较两个字符串对象的内容是否相同
例如:
String str1=new String(“hello”);
String str2=new String(“hello”);
System.out.println(str1==str2);
结果:false
虽然两个字符串的内容相同。但是产生两个String 实例.str1和str2分别引用不同的实例。所以使用==比较结果会显示false;如果要比较两个字符串对象的内容是否相同,要使用equals()方法

如下:
String str1=new String(“hello”);
String str2=new String(“hello”);
System.out.println(str1.equals(str2));
结果:true

还有一个常见的问题:上面代码产生几个实例?很多人会回答2个,但答案是3个。因为hello 就是一个,它存在于字符串池中。另外2个分别 new 构造出来的String类型对象,分别由str1与 str2 引用,所以总共是3个 String 实例

1. 4 StringBuilder 类
一个String 对象的长度是固定的,不能改变它的内同或者是附加新的字符到String 对象中。您也许会使用+来连接字符串达到附加新字符或字符串的目的。但会产生一个新String 实例。如果程序对这种附加字符串的需求很频繁,会消耗很大资源。

在J2SE 5.0提供StringBuilder 类 ,使用这个类所产生的对象默认会有16字符的长度。您也可以自定初始长度。如果附加的字符超出可容纳的长度,则StringBuilder对象会自动增加长度以容纳被附加的字符。如果有频繁的字符附加的需求,使用StringBuilder会让程序的效率大大提高。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值