Java String问题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
窗体顶端 我们平时上网发帖,帖子的标题、内容,QQ的聊天内容都是字符串。因为很常用,编程语言常常会把字符串封装成一类,实现方法,添加功能,以方便我们编程时的日常操作。Java中将字符串封装成java.lang包下的String类。查看javaapi,我们发现string是final所修饰的。代表着string这个类不能有子类。(也就是指类中对字符串操作的功能是不能被我们复写。) String类代表字符串。Java程序中的所有字符串字面值(如“abc”)都作为此类的实例实现。也就是说,在java中,只要是被“”概括的内容都是字符串,都是string的一个具体对象。 查看java的api,我们发现string类有无参构造函数,也就是说: String s = new String();等同于:String s = “”; 这样我们很容易发现第二种更简便,所以第一种初始化不多见。 下面来个小示例: String s1 = “abc”; 对于这样一个string例子,s1是一个类类型变量,类类型变量,一定指向对象。所以”abc”是一个对象。所以字符串(即所有用双引号引起来的)是一个特殊的对象。 字符串最大特点:(对象)一旦被初始化,就不可以改变。(字符串常量) String s = “abc”; s = “kk”; System.out.println(s); 打印输出的是kk。 可能有的朋友会有疑问,说不能改变,但为什么还会打印kk呢? 正如前面所说,s是一个类类型变量,s是可变的,它在一开始指向的是字符串对象(或者说常量)”abc”,而”abc”才是我们说的字符串对象,它这里面的内容是不会被其他东西改变的。同样”kk”也是一样。变的是s,不变的是”abc”和”kk”。同时”abc”和”kk”在内存中是同时存在的。 ? 还是看api,我们发现在string的有参构造函数中,还可以传入字符串。 注意: String s = “abc”; String s1 = new String(“abc”); 在使用上都是一样的,但是有区别: System.out.println(s == s1); //false,原因在于“abc”是一个对象,new String()是另一个对象。两者地址值不同。 System.out.println(s.equals(s1));//true,虽然String的父类Object类的equals()方法比较的是地址值,但是String类复写了父类的这一方法,该方法用于判断字符串是否内容相同。 面试题: String s = “abc”; String s1 = new String(“abc”); 有什么区别? s在内存中有一个对象 s1在内存中有两个对象 有关字符串常量池的简单说明 字符串是存储在一个叫常量池的内存中,以数组的形式进行存储像”a”,”b”和”c”这样的字符。 我们都知道,字符串是由字符数组组成。 当我们存”abc”时,内存将其放在数组中,然后我们又存一个“efg”,内存同样把它们分解放在数组中,而当我们再存储”abf”这个字符串时,内存会在数组中找到相应的字符来拼这个字符串。 引申出一道小练习: String s1 = “abc”; String s2 = new String(“abc”); String s3 = “abc”; System.out.println(s1==s2); System.out.println(s1==s3); 答案分别输出: false; true 关于第一个,我们上一部分已经说了。 那么第二个是怎么回事呢? S1指向一个对象字符串,s3也指向一个字符串, s1创建的字符串之前已经在内存中存在。字符串作为一种特殊的对象,且是在常量池里存储的数据。S3在初始化时发现,字符串中的字符已经在内存中存在的话,因为字符串内容相同(字符数组相同),s3就不会再独立开辟内存空间了。 如果s3再开辟内存空间就会产生浪费空间的现象:字符串已经存在且不会再改变,所以就不会再开辟空间。 二.常见方法 前面已经说了String类是用于描述字符串事物。那么它就提供了多个方法对字符串进行操作。常见的操作有哪些? 1.获取 1。1字符串中包含的字符数(长度) int length(); 注意:数组也有长度,也是length,但是数组的长度是属性,没有括号。 1.2根据位置获取位置上的某个字符。 char charAt(int index)当访问到字符串中不存在的脚标时,会发生字符串脚标越界异常:StringIndexOutOfBoundsException. 1.3根据字符获取该字符在字符串中的位置。 int indexOf(int ch);接收传入的参数是ascii码,返回的是ch在字符串中

文档评论(0)

yyanrlund + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档