JAVA基础-- 常用API --String类

在这之前的话还有一些很基础的知识点,有数组啊,面对对象啊这些,这些就还欠下吧.之后自己在不上去,第一篇的话就以这个开头吧

String
1.首先对这个类的概括:主要说说就他的特性吧:不可更改性
这个一个不能够被修改的类,他所创建出来的值是不能更改的.原因是因为这个类是被final修饰的,然后就是String这个类中是以字节组成的,类中定义了一个字节数组,并且也用final修饰了.(看从网的搜索似乎是JDK9后底层采用的字节数组)
附String类的内部代码:
在这里插入图片描述
特性所带来的好处
1.安全性
2.线程安全
3.用作HashMap的Key时,不可以变得特性使得他的hash值也可以不变,因此只需要进行一次计算
4.String Pool的需要

2.讲完string这个类的概括然后就说说他的常见的创建格式
一些常用也常见的:
String s = “ABC”;
String s1 = new String(“ABC”);
就说这两种
第一种 ,简单快速,没有第二种的那么多代码
第二种,个人感觉繁琐,因为能少写就少写嘛
然后个人对着两种的区分就是,第一种简单粗暴的方法他是编译时候先判断字符常量池中有没有你要创建的字符,没有的话直接将这个字符串存到了字符常量池中,然后返回一个引用地址给s,如果有的话就是直接去字符常量池中找,找到并把应用地址给s
第二种的话就是他会在第一种的基础上稍微有一些的改动,他是在运行的时候,首先在堆中创建一块内存,然后这块内存的引用地址赋给s1, 然后再去判断字符常量池中有没有你要创建的字符,没有的话直接将这个字符串存到了字符常量池中,然后返回一个引用地址给你new的时候堆中所创建的那块内存中去,如果有的话就是直接去字符常量池中找,找到并把应用地址给堆中所创建的那块内存中.
3.有关String关于 + 的理解
一般是分为两种的
String s = “123” + “456”;
String s1 = “123” + new String(“456”);
s == s1 —false
这两种的在代码的实现的时候是有差异的
1.在时间上的差异:
第一个是在编译的时候就将这两个字面量的值连接起来了并且变成了一个新的字符串也就是"123456",但是没有覆盖掉"123",“456”,然后再并放到了字符常量池中
第二就是
“123” + "456"编译期一如既往的还是分配在常量区内,new String(“456”)指向的456也在常量区,虽然s1也是初始化但是编译器无法判断new String(“456”)这货到底是什么个情况,进而不会将s1的等号右侧声明在常量区内,而是在通过构造时在堆区中的非常量池外的内存中声明,至此s与s1不止是分配内存的时期不同(一个在编译期,一个在运行期)而且在内存空间的区域也不同.

4.关于常量池(String Pool)
1.他的作用
就是提jvm的性能,避免String的大量重复创建占用内存
2.受保护
他是不会被GC回收,因为他在String类中是被私有化的,受String保护
3.位置:
在运行的时候在JDK7之前是在方法中的(永久代),但是7和之后就是放到了堆中
4.intern()方法
String s = “123” + “456”;
String s1 = “123” + new String(“456”);
String s1 = (“123” + new String(“456”)).intern();
s == s1 — true

拿这个例子来说吧
如果使用了intern()的话那么s1的指向也是指向String Pool中的,这时候的话 s==s1;
具体底层的实现目前还说不清 --抽空读<<深入理解JVM>>再解释

5.常用的方法
获取:
public int length () ;字符串长度
public String concat (String str); 连接的操作 和 + 一样
public char charAt (int index); 通过下标获取指定的字符’’
public int indexOf (String str)返回字符串第一次出现的下标地址
判断功能
1.== 比较的地址
2.无视大小写比较 public boolean equalsIgnoreCase (String anotherString)
3.加大小写比较 boolean equals (Object anObject)
转换功能
大小写转换:
小- 大:public String toUpperCase()
大 - 小:public String toLowerCase()
转成字符数组 public char[] toCharArray ()
转成字节数组 public byte[] getBytes ()
将字符串中指定的字符串转为想要的字符串:public String replace (CharSequence target, CharSequence replacement)
截取功能
public String[] split(String regex) 分割
public String substring (int beginIndex) 有始无终
public String substring (int beginIndex, int endIndex) 有始有终

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值