zoukankan      html  css  js  c++  java
  • java基础>String类 小强斋

    String

     匿名对象

    new  Person("张三",30).tell() ;

    由于匿名对象没有对应的栈内存所指向,所以使用一次之后就等待被垃圾回收了。

    1String在使用中有两种实例化的方法

    一种是采用直接赋值(将字符串赋String的对象),

    String str = "Hello" ;    //定义一个字符串

    第二种方法是通过构造方法完成实例化的操作,

    String str = new String("Hello");  //定义一个字符串

    一个字符串就是一个String的匿名对象

    区别:

    第一种 String str = "Hello" ;按照之前的理解,现在肯定是将一个字符串的堆空间的地址给str,所以图形如下:

       此时的代码中,只在堆内存中开辟了一块空间,但是如果现在是第二种方式:

      String str = new String("Hello") ;使用构造方法进行对象实例化的时候,由于内部的字符串属于匿名对象的原因,所以将产生两块堆内存空间,其中有一块将成为垃圾。

      除了内存空间的少之外,如果使用了直接赋值现在还有另外一种好处,就是如果以后如果再声明了与之一样的字符串的话,则不会再重新开辟新的内存空间

    public class StringDemo {
    
          public static void main(String  args[]){
    
               String str1 =  "hello" ;
    
               String str2 =  "hello" ;
    
               String str3 =  "hello" ;
    
               System.out.println("str1  == str2 --> " + (str1==str2)) ;    //  true
    
               System.out.println("str1  == str3 --> " + (str1==str3)) ;    //  true
    
               System.out.println("str2  == str3 --> " + (str2==str3)) ;    //  true
    
          }
    
    };
    

    此时返回的结果都是true,所以很明显,以上的三个String的对象都同时指向同一个堆内存空间的“hello”字符串,那么如果使用的是构造方法赋值的话,根本不可能实现此效果。

           之所以内容会相等,是因为在JAVA底层中存在了一个字符串的对象池,每次的内容都会从池中取出,如果内容已经存在了,则使用已经存在的,如果不存在,则会生成一个新的,放入池中,属于共享设计模式

           由于这种原因,只要是使用String类的话,永远都要采用直接赋值的方式完成。

    2、字符串的比较

    只要是字符串的比较操作就统一都使用equals()方法完成。

    两种比较的区别:==equals()

          · ==:用于数值比较,比较的是两个字符串的地址值

          · equals():用于内容的比较,比较两个字符串的内容是否相等

    3、字符串的内容一旦声明则不可改变

           一个字符串肯定是保存在堆内存之中的,所以一旦一个字符串声明之后,则无法改变。

    public class StringDemo08 {
    
             public static void main(String args[]){
    
                       String str = "hello" ;
    
                       str = str + " world" ;
    
                       str += " !!!" ;
    
                       System.out.println(str) ;
    
             }
    
    };
    

    通过内存图可以发现一点,每一个字符串的内容原本并没有发生任何的改变,改变的是只一个字符串的内存地址的指向(断开旧连接,指向新连接),而且操作完成之后会发现有很多的垃圾产生,所以,以后对于频繁修改字符串的代码应该尽可能的回避,使用stringBuffer代替。

    4String类的相关操作

    字符串与字符数组 

    No.

    方法名称

    类型

    描述

    1

    public String(char[] value)

    构造

    将一个字符数组全部变为字符串

    2

    public String(char[]  value,int offset,int count)

    构造

    将一个字符数组的指定范围的内容变为字符串

    3

    public char[] toCharArray()

    普通

    将字符串变为字符数组

    4

    public char charAt(int  index)

    普通

    返回指定位置的字符

    5

    public int length()

    普通

    求出字符串的长度

     字符串与字节数组:

    No.

    方法名称

    类型

    描述

    1

    public String(byte[] bytes)

    普通

    将字节数组变为字符串

    2

    public String(byte[]  bytes,int offset,int length)

    普通

    将指定范围的字节数组变为字符串

    3

    public byte[] getBytes()

    普通

    将字符串变为字节数组

    字符串比较

    1

    public boolean  equalsIgnoreCase(String anotherString)

    普通

    忽略大小写的比较

    字符串截取

    1

    public String substring(int  beginIndex)

    普通

    从指定位置截取到末尾

    2

    public String substring(int  beginIndex,int endIndex)

    普通

    截取指定范围的内容

    判断字符是否存在

    1

    public int indexOf(String  str)

    普通

    从头开始判断,如果找到则返回位置,找不到返回-1

    2

    public int indexOf(String  str,int fromIndex)

    普通

    从指定位置开始查找,如果找到则返回位置,找不到返回-1

    3

    public boolean contains(String s)

    普通

    直接判断是否存在

    字符串拆分

    1

    Public String[] split(String regex)

    普通

    按照指定字符串拆分

    在进行字符串拆分的时候,如果发现有某些字符串无法拆分,则使用转义。

    String str ="192.168.1.3" ;

    String s[] =str.split("\\.") ;

    字符串替换

    1

    public String replaceAll(String regex,String  replacement)

    普通

    全部替换

    2

    public String replaceFirst(String regex,String  replacement)

    普通

    替换第一个满足的内容

    其他操作

    No.

    方法名称

    类型

    描述

    1

    public String toLowerCase()

    普通

    转小写

    2

    public String toUpperCase()

    普通

    转大写

    3

    public String trim()

    普通

    去掉左右空格

    4

    public boolean startsWith(String prefix)

    普通

    判断是否以指定的字符串开头

    5

    public boolean endsWith(String suffix)

    普通

    判断是否以指定的字符串

     

  • 相关阅读:
    Oracle序列使用:建立、删除
    struts1.x入门
    SQL的四种连接-左外连接、右外连接、内连接、全连接
    eclipse更改文件编码方式
    使用links方式安装Eclipse插件
    JAVA:Eclipse代码自动提示
    MyEclipse注释配置
    全面理解SQL
    一秒去除Win7快捷方式箭头
    Eclipse快捷键大全(转载)
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637603.html
Copyright © 2011-2022 走看看