String类API(一)详解

public final class String—>被final进行修饰,不可进行改变,最终类
String类的概述:最终类

java中所有的字符串常量都是String类的对象
String类底层是根据不可改变字符数组来实现数据存储的,String对象的内容是无法改变的(常量)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200817093340267.png#pic_center)private final(源码)表示的是最终的字符数组,不可以被改变的字符数组,且外界不能被访问的数组。
- StringBUilder和StringBuffer不产生新的未使用的对象

当参与运算的都是常量那么在编译期间就会进行优化,直接计算结果再进行赋值

	String s4="a"+"b";//创建两个  常量池  2
	byte b=128-1;---->直接进行右边的优化计算,在进行赋值给b,没有进行报错

常量池的出现就是为了节省内存空间,提高计算机的查询速度。

二进制字节码文件的加载(class文件)

首先获取这个类的二进制字节流,将这个字节流中的数据存储到**方法区中**,然后生成一个代表该类的 java.lang.Class 对象(HotSpot 是把 Class 对象放在方法区中),用来访问方法区这些数据。JVM在堆中产生一个class对象

方法区中有两个常量池:静态常量池,运行时常量池(jdk-1.7)

	静态常量池:存储静态信息,静态资源的,随着类的加载而进行加载。现给定的是默认值,初始化在进行赋值操作,所以静态不能使用非静态
	运行时常量池:存储基本类型的常量,字符串常量,存储在方法区中,引用类型的常量等各种不能改变的数据在程序中。

总共创建几个对象? 5个对象

String str=“a”; //1 方法区中
str+=“b”;//str=new StringBuilder(“a”).append(“b”).toString();//4----->源码中toString方法返回了一个新对象
1(堆) 1(方法区) “ab” (方法区) 1(堆)
字符串常量对象有:a b ab tostring()返回对象,newStringBuilder()
在这里插入图片描述
区别:
StringBuilder与StringBuffer,String:

	jdk1.0开始String类作品皆使用的是StringBuffer,安全可靠,倒是拼接效率低下
	jdk1.5开始String类做拼接使用的是StringBuilder,不安全,但是拼接效率较高
	String 长度大小不可变
	String进行字符串的拼接的时候,产生的是新的对象,只是将新对象的引用赋值和原对象的引用
	StringBuffer 和 StringBuilder 长度可变
	StringBuffer 线程安全 StringBuilder 线程不安全
	StringBuilder 速度快
	StringBuilder的底层是初始容量是 16

重要方法:

 1. charAt():根据指定的下标值返回字符串对象对应的字符---底层通过访问字符数组进行返回数组的值
 2. length():根据字符串的长度,返回字符串的字符个数---底层通过访问字符数组的长度length,返回length的值
 3. toCharArray():将字符串转换成字符数组,进行数组的迁移
 4. String 的构造方法有很多-----API应用程序接口
 5. compareTo():对两个字符串数组进行排序,排序规则根据字典进行排序求差值如果差值为0,则进行个数的比较
			
			         //如果方法返回值为正数,说明前面对象大于后面的对象
			        //如果方法返回值为负数,说明前面对象小于后面的对象
			        //如果方法返回值为0,说明前面对象和后面的对象内容一致	        
 6. concat():底层是根据数组扩容来拼接字符串,将指定的字符串拼接到另一个字符串的末尾
 7. contains();判断字符串中是否存在给定的子串,返回boolean值
 8. startWith();判断字符串是否值是以规定的子串开头----文件过滤,查询
 9. endWith():判断字符串是否值是以规定的子串结尾----文件过滤,查询
 10. boolean equals(Object anObject)   ;进行字符串的比较,比较地址值和内容是否相同
 11. boolean equalsIgnoreCase(String anotherString)  :忽略大小写的比较形式,----验证码
 12. getBytes();把字符串对象内容转成字节数组
 13. new String(Byte[],int offset,int length,CharSet character):可以字节数组的部分内容转成新的字符串对象
 14. hashCod():计算的是哈希码的值(哈希算法)哈希码值的计算过程和对象的内出现的容有关系--底层源码
 15. indexOf();根据指定内容返回在对象内容中的第一次下标值---多个重载方法

方法的拓展:

构造函数中:

- 不管你是否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个默认构造方法,默认构造方法的访问修改符和类的访问修改符相同(类为 public,构造函数也为 public;类改为 protected,构造函数也改为 protected)。
- 一旦自定义了构造方法,不管是有参构造还是无参构造,默认构造方法就会失效

命令行参数:

- 有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。
- 命令行参数是在执行程序时候紧跟在程序名字后面的信息。

可变参数:

	- JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。
	- 方法的可变参数的声明如下所示:typeName... parameterName(int..a)
	- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

可变参数的代码执行:

public class FinalizationDemo {  
  public static void main(String[] args) {  
    Cake c1 = new Cake(1);  
    Cake c2 = new Cake(2);  
    Cake c3 = new Cake(3);  
      
    c2 = c3 = null;  
    System.gc(); //调用Java垃圾收集器
  }  
}  
 
class Cake extends Object {  
  private int id;  
  public Cake(int id) {  
    this.id = id;  
    System.out.println("Cake Object " + id + "is created");  
  }  
    
  protected void finalize() throws java.lang.Throwable {  
    super.finalize();  
    System.out.println("Cake Object " + id + "is disposed");  
  }  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值