您的位置:首页 > 编程语言 > Java开发

Java基础_String类和基本数据类型对象包装类

2014-05-23 12:18 691 查看

概述

String s1 = "abc";//s1是一个类类型变量,“abc”是一个对象

字符串最大特点:一旦被初始化就不可以被改变,但字符串对象的引用可以改变。“abc”对象的内容不会改变

String s2 = new String("abc");//这句话在内存中有两个对象,因为新创建的字符串是该参数字符串的副本

s1==s2//结果为false,比较的是地址值

s1.equals(s2)//结果为true,String类覆写了Object类中的equals方法,该方法用于判断字符串是否相同。

面试题:s1和s2有什么区别?

s1在内存中有一个对象

s2在内存中有两个对象

字符串对象存在于常量池(方法区:方法数据+静态区+常量)

String s3 = “abc”;//初始化时发现“abc“已经存在于常量池,所以就不会独立开辟空间了

s1==s3//结果为true,指向同一对象

String s1 = "1"+"";
String s2 = "1"+"";
System.out.println(s1==s2);//结果为true。s1和s2都是两个常量相加,所以编译器在翻译这段代码为二进制代码前直接进行优化。
String s4 = "";
String s3 = s1 + s4; //是两个变量相加,编译器翻译这段代码时不知道未来该变量是何值,所以无法进行优化。
System.out.println(s3==s4);//结果为false。


常见方法

String类用于描述字符串事物,那么它就提供了多个方法对字符串进行操作。

1、获取

1.1、字符串中包含的字符数,也就是字符串的长度。

int length();
注意数组也有长度,但是是属性没有括号。

1.2、根据位置获取位置上的某个字符

char charAt(int index);//当访问到不存在的角标是会发生StringIndexOutOfBoundsException

1.3、根据字符获取该字符在字符串中的位置

int indexOf(int ch);//返回的是ch在字符串中第一次出现的位置,参数为字节的ASC码
int indexOf(int ch, int fromIndex);//从指定位置开始索引,获取ch在字符串中出现的位置

int indexOf(String str);//返回的是str在字符串中第一次出现的位置
int indexOf(String str, int fromIndex);//从指定位置开始索引,获取str在字符串中出现的位置

int lastIndexOf(int ch)//反向索引一个字符出现的位置

如果没有找到该字符或字符串,返回-1

2、判断

2.1 字符串中是否包含某一个子串

boolean contains(String str);
特殊之处:int indexOf(String str);可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以也可以用于对指定字符串判断是否包含,而且该方法既可以判断,又可以获取出现的位置。

2.2 字符串中是否有内容

boolean isEmpty(String str);//就是判断长度是否为零。""和null有区别

2.3 字符串是否是以指定内容开头

boolean startsWith(String str);

2.4 字符串是否是以指定内容结尾

boolean endsWith(String str);
使用场景:判断文件名

2.5 判断字符串的内容是否相同

boolean equals(String str); //覆写了Object类中的equals方法,原方法使用==比较地址值

2.6 判断内容是否相同,并忽略大小写

boolean equalsIgnoreCase(String str);//判断登录邮箱

3、转换

3.1 将字符数组转成字符串

构造函数:String ( char [ ] )
String ( char [ ], offset, count):将字符数组中的一部分转成字符串,offset为起始位
静态方法:static String copyValueOf ( char [ ] );
static String copyValueOf ( char [ ] data, int offset, int count)
static String valueOf ( char [ ] );

3.2 将字符串转成字符数组

char [ ] toCharArray();//字符串对象直接调用

3.3 将字节数组转成字符串

构造函数:String ( byte [ ] )

String ( byte [ ], offset, count):将字节数组中的一部分转成字符串,offset为起始位,多用于IO流

特殊:字符串和字节数组在转换过程中是可以指定编码表的

3.4 将字符串转成字节数组

byte [ ] getBytes();

3.5 将基本数据类型转成字符串

static String valueOf (int);
static String valueOf (double);

3+"";//String.valueOf(3);都是将3转换成字符串
基本数据类型.toString(基本数据类型值);

4、替换

String replace (char oldchar, char newchar); //字符串一旦创建不会被改变,该方法会返回一个新字符串,原字符串不变,如果要替换的字符不存在,返回的还是原字符串。也可以替换字符串。也可以根据正则表达式进行替换

5、切割

String [ ] split (String regex);// 参数是一个正则表达式,返回一个字符串数组

6、子串

String substring(int beginIndex)//从指定位置开始到结尾,如果角标不存在,会出现字符串角标越界异常。
Stringsubstring( int beginIndex, int endIndex); //包含头,不包含尾。获取整个字符串s.substring(0,s.length())

7、转换,去除空格,比较

7.1 将字符串转成大写或者小写

String toUpperCase();
String toLowerCase();

7.2 将字符串两端的多个空格去除

String trim(); //多用于用户登录对用户名进行处理

7.3 对两个字符串进行自然顺序的比较

int compareTo(String str);

StringBuffer

StringBuffer是字符串缓冲区,是一个容器
特点:

长度是可变化的,
可以直接操作多个数据类型。
最终会通过toString方法变成字符串

常见方法

CURD: create update read delete

1、存储

StringBuffer append():将指定的数据作为参数添加到已有数据的结尾处
StringBuffer insert (index, 数据):可以将数据插入到指定index位置,当index为0时,可以在已有数据头添加数据。

2、删除

StringBuffer delete (start, end):删除缓冲区中的数据,包含start,不包含end
StringBuffer deleteCharAt(index):删除指定位置的字符
清空缓冲区:sb.delete(0,sb.length());

3、获取

char charAt(int index);//通过角标获取字符
int indexOf(String str);//根据字符串获取位置
int length()
int lastIndexOf(String str);

String substring(int start, int end);//注意返回的是String不是StringBuffer

4、修改

StringBuffer replace(int start, int end, String str);
void setCharAt(int index, char ch);

5、反转

StringBuffer reverse();

6、将缓冲区中的指定数据存储到指定字符数组中

void getChars(int srcBegin, int srcEnd, char[ ] dst, int dstBegin) ;

StringBuilder

jdk1.5版本之后出现了StringBuilder
StringBuffer是线程同步的
StringBuilder是线程不同步的
以后开发建议使用StringBuilder
升级三个因素:提高效率,简化书写,提高安全性

基本数据类型对象包装类

基本数据类型引用数据类型
byte Byte
shortShort
intInteger
longLong
booleanBoolean
floatFloat
doubleDouble
charCharacter
整数类型的最大值:Integer.MAX_VALUE
基本数据类型对象包装类最常见的作用就是用基本数据类型和字符串类型之间做转换

基本数据类型转成字符串

基本数据类型+“”
基本数据类型.toString(基本数据类型值); 比如 Integer.toString(34);

字符串转成基本数据类型

静态调用方式

xxx a = Xxx.parseXxx(String s); 比如 int a = Integer.parseInt("123"); 必须传入数字格式的字符串

对象调用方式

Integer i = new Integer("123");
int num = i.intValue();//这里自动拆箱

进制互转

十进制转成其他进制

toBinaryString();
toHexString();
toOctalString();

其他进制转成十进制

Integer.parseInt(String s, int radix); 传入的s不对会抛出NumberFormatException

Integer x = new Integer("123");
Integer y = new Integer(123);
x==y;//结果为false,因为是两个对象
x.equals(y);//结果为true,因为equals方法被覆写,比较的是内容

jdk1.5新特性

自动装拆箱

Integer x = 4;//自动装箱,等同于Integer x = new Integer(4)
x = x + 2;//此时x可以直接运算,x+2:x进行了自动拆箱(x.intValue();),变成了int类型,和2进行加法运算。再将和进行装箱,赋给x
注意:当x为引用数据类型时,此时x多了一个值为null

byte的特殊现象

Integer m = 128;
Integer n = 128;
m==n;//结果为false,因为不是同一个对象

Integer m = 127;
Integer n = 127;
m==n;//结果为true
因为a和b指向了同一个Integer对象,当数值在byte(-128~+127)范围内时,对于新特性,如果该数值已经存在,不会在开辟新的空间产生新的对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐