java—字符串常用类

1. 字符串常用类

1.1 String类

  • String 类:代表字符串。 Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。String s = "abc"; 但是不同于一般类的创建对象方式
  • String 是一个 final 类,代表 不可以被继承。
  • String 对象的字符内容是存储在一个字符数组 value[]中的。 value[]用final修饰,代表不可变的字符序列。
 
value[]用final修饰的不可变的字符序列理解:
  • 字符串String类有两种实例化的方式:1. String s = "abc"; //字面量的创建方式             2. String s = new String("abc"); //new的创建方式
  • 通过字面量的创建方式创建的字符串储存在方法区的常量池中。
  • 通过new的方式创建的字符串储存在堆中
  • 不可变性也就是说final value[] 是储存在方法区中的常量池里,在常量池内,不能存在两个内存区域储存相同字符串值。
  • String s1 = "abc"; String s2 = "abc";s1和s2的首地址值是指向同一内存区域的
  • s1 = "hello";重新赋值后,不是在原有位置上对原来存储的内容进行修改,而是重新指定一个新的内存区域来存储"hello"
 
String对象创建的几种方式:
 
  • 字面量的创建方式:  String str = "hello"
  • String s1 = new String();  //创建一个空的字符串对象
  • String s2 = new String("abc");实际上是"abc"本身就是常量池中的一个对象,在运行 new String()时,把常量池中的字符串"abc"复制到堆中,并把这个对象的引用交给s2 。所以创建了两个String对象,一个在常量池中,一个在堆中。
  • 注意 == 是比较首地址值,equal是比较内容
  • byte[] bytes = new byte[]{100,99,98,97}; String s4 = new String(bytes);  给定一个字节数组,根据字节数组的内容翻译成字符串
 
类中定义的字符串的属性是如何储存的:
  • 自定义的person类中声名的属性:public String name = "Tom"; 
  • 上图中的两个对象的"Tom"是储存在常量池中的,堆空间存储的是name:首地址,指向堆空间的Tom,而且这两个Tom在常量池中是同一个。 

 

  • 面试题:String s2 = new String("abc"); 在内存中创建了几个对象?
  • 两个。相当于先创建一个对象,指向常量池中的"abc",然后再创建一个储存在堆空间中的对象,并把常量池中复制给堆中。
  • 如果常量池中已经有"abc",那么就不用重新创建,可以直接用。
 
 
 
 

面试题:重要

  • 参数传递时,引用类型传递的是首地址,基本数据类型传递的是值
  • 注意:参数列表中相当于新建了两个对象str和char(只在该方法内有效),这两个对象和属性里的str和char虽然同名,但其实是不同的。
  • 如果在change方法内print str就是"test ok"
  • 下面链接可参考
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值