Java基础之怎么理解字符串String

本篇内容主要讲解“Java基础之怎么理解字符串String”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java基础之怎么理解字符串String”吧!

桂东网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联公司于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司

字符串常量不可变

底层原码中使用final修饰 char[] value来存储字符串的值。字符串常量是存在常量池中,一旦声明,就不可以改变,同时常量池中不会存储相同内容的字符串,即s1与s2是相等的。

String s1 = "aaa";

s1 = "bbb";

System.out.println(s1);

String s1 = "123";

String s2 = "123";

System.out.println(s1==s2);

输出的s1的值是bbb,不是改变了么?注意这里的s1是引用对象,因此s1存在栈空间中,也就是s1与aaa并不存在同一内存空间中,只是中间连接了一条绳子将aaa指向了s1,现在这条绳子由bbb指向了s1,但是aaa其实还留在了常量池中,所以说字符串常量是不可改变的。

除此之外,String还实现了Serializable接口,表示字符串可以被序列化,还实现了Comparable接口表示字符串可以比较大小

null," "的区别

String s1 = null

String s2 = ""

null代表的是空对象,并不是字符串,可以赋给任何对象,字符串中表示只是一个引用,还没有内存空间的分配

“ ”表示引用已经指向了 一块内存空间了,是一个实际的东西,可以进行操作了,表示一个长度为0的字符串

数组转成字符串(String的构造)

String():构造一个空的字符串

String(byte[] arr): 将字节数组变为一个字符串

String(byte[] arr, int offset, int lengh): 将字节数组部分变为字符串

String(char[] arr): 将char字节数组变为字符串

String(char[] arr, int offset, int length): 将char字节数组部分变为字符串

String(String original): 字符串常量构建字符串

byte[]===>String

全部转换:转换所有byte数据郑州祛胎记医院哪家好 http://www.zykdtj.com/

byte[] b = {97,98,99,100};

String str = new String(b);

System.out.println(str);//abcd

部分转换: 截取转换,超出索引,报出StringIndexOutOfBoundsException异常,通常Java中数组索引区间左开右闭的

byte[] b = {97,98,99,100};

String str = new String(b,1,3);

System.out.println(str);//bc

char[]转String等等一些数组转String的方式都和上述大同小异,这些都是对String方法使得构造

==与equals()的比较字符串是否相等

== 比较的地址和内容都相等才相等

equals()内容相等即是相等

理解上面两句:

String s1 = "123";①

String s2 = "123";②

String s3 = new String("123");③

System.out.println(s1==s2);//正确

System.out.println(s1==s3);//错误

5

只要明白了内存分布,判断不成问题。对于①,②来说,上面已经解释过了都在栈内存中,对于③来说,s3是对象存在Java堆中,s1,s2都是存在Java栈中,所以s1==s3是错误的!!!对于equals()就不一样了三者内容都是相等的。

练习一:

String s1 = new String("hello");

String s2 = new String("hello");

System.out.println(s1==s2);

System.out.println(s1.equals(s2));

String s3 = new String("hello");

String s4 = "hello";

System.out.println(s3==s4);

System.out.println(s3.equals(s4));

String s5 = "hello";

String s6 = "hello";

System.out.println(s5==s6);

System.out.println(s5.equals(s6)

字符串的拼接

常量与常量的拼接还在常量池中

常量池不可有相同的常量

拼接的时候,只要存在变量都会存到堆中

调用intern()方法返回常量池里面的常量

String s1 = "hello";

String s2 = "world";

String s3 = "helloworld";

System.out.println(s3==(s1+s2));//F 变量的连接存在堆中不相等

System.out.println(s3==(s1+s2).intern());//T 获取的是值相等

System.out.println(s3.equals(s1+s2));//T 获取内容相等

System.out.println(s3=="hello" + "world");//T 常量与常量连接还在常量池中

System.out.println(s3.equals("hello"+"world"));//T 内容相等

字符串操作常用方法

字符串的判断:

equals方法比较两个字符串内容是否相等

equalsIgnorecase忽略大小写比较两个对象是否相等

contains是否包含字符串

startsWith()是否以指定的字符串开头

endsWIth()是否以指定的字符串结尾

isEmpty()是否为空

String s1 = "abcde";

String s2 = "AbCde";

String s3 = "abcde";

//equals

System.out.println(s1.equals(s2));//t

System.out.println(s1.equals(s3));//f

//equalsIgnorecase

System.out.println(s1.equalsIgnoreCase(s2));//t

System.out.println(s1.equalsIgnoreCase(s3));//t

//是否包含指定字符串

System.out.println(s1.contains("bd"));//f

//是否以指定字符串开头

System.out.println(s1.startsWith("ab"));//t

System.out.println(s1.startsWith("cde",2));//t 字符串是否在索引2开始截取

//是否以字符串结尾

System.out.println(s1.endsWith(s3));//t

//是否为空

System.out.println(s1.isEmpty());//false

18

字符串的获取

length():字符串的长度

charAt(inx index):返回某个字符在字符串中的索引

indexOf(int ch):获取指定的字符在字符串第一次出现的位置,可以写对应的ASCALL码值

indexOf(int ch, int fromIndex):从指定的索引开始,字符出现的位置

indexOf(String str):获取指定的字符串在原字符串的位置

indexOf(String str, int fromIndex):从指定的索引开始,获取字符串第一次出现的位置

lastIndexOf(int ch):获取指定字符最后一次出现的索引值

lastIndexOf(String str,int fromIndex)获取指定字符串最后出现的索引值

subString(int start):从指定位置开始截取字符串

subString(int start, int end)从指定位置到指定位置截取字符串

到此,相信大家对“Java基础之怎么理解字符串String”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


本文标题:Java基础之怎么理解字符串String
文章出自:http://cdiso.cn/article/ijeiid.html

其他资讯