Java String类 笔记

String 类

  • 定义:

     在Java语言中,所有被双引号括住的都属于字符串,都是String类的实例;String类位于java.lang包下,提供了字符串的创建、比较、查找、截取、大小写转换等操作;字符串对象可以使用“+”连接其他对象。
    
  • 创建字符串

    方式一:

    String str = "sss"; 	//创建字符串最简单的方式,双引号内为字符串常量,这里编译器使用该值创建了一个 String 对象。
    

    方式二:

    String str2=new String("sss");		//使用new对象的方式创建字符串
    

    注意:

     1、String类被final关键字修饰,所以不能被继承,并且它的成员方法都默认为final方法,字符串一旦创建就不能再修改。
     2、String类实现了Serializable、CharSequence、 Comparable接口。
     3、String实例的值是通过字符数组实现字符串存储的。
    
  • 连接字符串:

    “+”连接符原理:

     Java语言为“+”连接符、对象转换为字符串提供了特殊的支持,字符串对象可以使用“+”连接其他对象,其中字符串连接是通过 StringBuilder(或 StringBuffer)类及其append 方法实现的,对象转换为字符串可以通过 toString 方法实现。
     
     Java中使用"+"连接字符串对象时,会创建一个StringBuilder()对象,并调用append()方法将数据拼接,最后调用toString()方法返回拼接好的字符串。
    

    “+”连接符的效率:

     使用“+”连接符时,JVM会隐式创建StringBuilder对象,这种方式在大部分情况下并不会造成效率的损失,不过在进行大量循环拼接字符串时则需要注意。
    
  • 字符串常量池(String Pool)

    字符串的分配和其他对象分配一样,需要消耗时间和空间,而且字符串使用的非常多。JVM为了提高性能,在实例化字符串的时候进行了优化,即使用字符串常量池。创建字符串常量时,JVM会先检查字符串常量池,如果该字符串已经存在常量池中,就直接返回常量池中的实例引用。如果该字符串在常量池中不存在,就会实例化该字符串并且将其放到常量池中,常量池中一定不存在两个相同的字符串。

    在JDK6及之前版本,字符串常量池放在Perm Gen区(也就是方法区)中;在JDK7版本中,字符串常量池被移到了堆中。

    在JDK6及之前版本中,String Pool里放的都是字符串常量;在JDK7.0中,由于String.intern()发生了改变,因此String Pool中也可以存放放于堆内的字符串对象的引用

    代码举例:

    		String s1 = "A";
    		String s2 = "A";
    		String s3 = new String("A");
    		System.out.println(s1 == s2);
    		System.out.println(s1 == s3);
    

    常量池中不存在两个相同的对象,所以s1和s2都是指向JVM字符串常量池中的 “A” 对象。new关键字一定会产生一个对象,并且这个对象存储在堆中。所以 String s3 = new String(“A”) 产生了两个对象:保存在栈中的s3和保存堆中的String对象(其实 String s3 = new String(“A”) 一共包含三个对象:s3(栈中) 、 new String(堆中,常量池外)、 “A”(java7后在堆中常量池中,java7前在方法区中的常量池中) ,“A" 在前两个语句中已经创建好了,所以 String s3 = new String(“A”) 创建了两个对象)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值