String 字符串 篇

来源:互联网 发布:人工智能统治人类 电影 编辑:程序博客网 时间:2024/06/16 15:36
    String 字符串 篇
一 String作为Java中最常用的引用类型,String是个封装类,不属于八大类型(byte,short,int,long,double,float,char,boolean).String默认值是null。string 在java底层是以数组的形式 char[] c1 = {'h','e','l','l','o'};
二String 常用方法

1.length();字符长度

2.charAt();单个字符截取

3.subString();多个字符截取
4.trim();去除空格,首尾空格去除 中间不去除
5.compareTo();两个字符比较,进行ASCII差值,返回ASCII
6.isEmpty();判断字符是否为空
7.indexOf();字符第一次出现的位置
8.lastIndexOf();字符最后一次出现的位置
9.toLowerCase();字符中含大写字母转化成小写字母
10.toUpperCase();字符中含小写字母转化成大写字母
11.startWith();判断是否以给定开始 的字符输出,例如:startWith("a")

12.endWith();判断是否以给定开始 的字符输出

13.equals()和==
  equals()方法比较字符串对象中的字符,==运算符比较两个对象是否引用同一实例。
  例:String s1="Hello";
    String s2=new String(s1);
    s1.eauals(s2); //true
    s1==s2;//false

三.字符类型和数值型数据之间转化
1.字符型转换成数值型数据:parse***( String)
 double(float|long|int|short|byted)=Double(Float|Long|Integer|Short|Byte).parseDouble(Float|Long|Integer|Short|Byte)(String字符);

eg:String str="1.22";
double d=Double.parseDouble(String);
2.数值型抓换成字符型数据:valueOf()
 String.valueOf( byte|short|int |long|float);

四.String 在底层如何保存

 (1)字符串池: 
     是内存中的一部分(堆内存),专门存放字符串字面量
     字符串字面量:指的是字符串中的具体内容  


1)字符串池中存储的字符串有什么特点?
       具体的字符串
       字符串池中的字符串不允许重复.   
 
2)字符串池中存字符串如何存?
       "先检查,没有的话开辟空间存储,有指向"
       
       详细描述:
       字符串存到字符串池之前,会先检查字符串池中
       有没有这样一个字符串(值),
       如果有,不会再开辟空间存这个字符串,会将池中的字       符串的引用赋给
       要当前字符串,注:此时,两个指向同一个字符串
       如果没有,再开辟空间存储当前字符串  
  (2) 什么样的字符串可以放在字符串池中?
     a. 直接将一个双引号中的字符串赋值给String变量

         String s1 = "hello"
     b. 多个由双引号组成的且中间使用 + 号连接的
        String s1 = "hello";
        String s2 = "h"+"e"+"llo";//jvm自动优化
        自动优化:先将多个使用加连接的字符串合并在一起,
        然后作为整体再池中检查有没有...
 (2) 堆内存: 
   java中,对象类型的数据都会存储到堆内存;
   (数组,集合,系统源码类,自己定义类)
   即: 使用 new创建的对象数据,数组,集合        
  1. 什么样的字符串存储在堆内存?
      使用 new 关键字定义的字符串;
         String s1 = new String( "hello" );

        注:此时创建了两个对象
      1个是在字符串池中创建的hello字符串
      1个是在堆内存中创建的s1对象(对象中的内容hello)  


  2. 堆内存中如何存储字符串数据?
      String s1 = new String( "hello" );   
     step1. 先去字符池中找有没有值为hello的字符串
           没有就开辟区域存储hello; 
           有的话,不会再开辟;


     step2, 栈内存和堆内存中开辟空间存储
       先在栈内存开辟空间存储变量 s1
       接着在堆内存开辟空间存储  s1对象
       当执行 String s1 = new String( "hello" )时
       将 栈内存的变量 s1 指向 堆内存中的s1对象





0 0