java中String类的常用方法

构造方法

String 类型的构造方法

  • String s = “”; 最常用
String s = "hello";
  • 2,String s = new String("");
String s = new String("hello");
  • 3,String s = new String(char数组);
char[] chars = {'你','好'};
String s = new String(chars)
  • 4,String s = new String(char数组,起始下标,长度)
char[] chars = {'你','好','世界'};
String s = new String(chars,1,2);

  • 5,String s = new String(byte数组);
byte[] bytes = {97,98,99};
String s1 = new String(bytes);
System.out.println(s1);//abc
  • 6,String s = new String(byte数组,起始下标,长度);
String s3 = new String(bytes,1,2);
System.out.println(s3);//表示从第一个元素起始位置开始,长度为2,将byte数组的一百部份转化为字符串

不同方式创建字符串对象内存的变化

字符串常量池:

字符串常量池是为了避免多次创建字符串对象,在JVM中开辟了一块空间,存储不同的字符串,开发效率也大大提高
在JDK1.7之前字符串常量池是存放在方法区内存当中的,从JDK1.7开始,字符串常量池被单独拿到堆内存中了

当以"" 的形式声明字符串,java会去字符串常量池当中寻找此字符串,如果字符串常量池中没有该字符串,则会在字符串常量池当中创建该字符串对象,并将字符串常量池中字符串对象的地址返回给该引用.如果字符串常量池当中又该字符串,直接将地址返回给引用
当以new String(" hello ")的方式来创建:这种情况会在堆内存中创建两个对象,首先"hello"会在字符串常量池中创建对象.new String()会在堆内存中创建一个对象,new String() 对象里存储的是 "hello"的引用,指向字符串常量池中的字符串对象.
字符串不可变

可以看看java.lang.String的源码.
在这里插入图片描述
value数组是用于字符的存储,这个数组被final修饰,数组创建之后,数组的长度不可变,final修饰的引用一旦指向一个对象之后,就不能在指向其他对象了.

因为java中的字符串是不可变的,每一次拼接会产生新字符串
这样会占用大量的方法区内存会给字符串常量池带来很大的压力。
这时候可以使用jdk中java.lang.StringBuffer
java.lang.StringBuider,
在这里插入图片描述
这是java.lang.StringBuffer类中的构造方法,他们也是用char[]数组存储字符的,但是并没有被final修饰,数组的长度可以改变,当调用无参构造方法的时候,数组默认长度为16.

String类的常用方法
//1,charAt(int index)
        char c = "中国人".charAt(1);
        System.out.println(c); // 国,

        //2,compareTo(String anotherString)
        int result = "abc".compareTo("abc");
        System.out.println(result);// 0

        int result1 = "abcd".compareTo("abce");
        System.out.println(result1);//-1

        int result2 = "abce".compareTo("abcd");
        System.out.println(result2);//1

        //3,boolean contains(CharSequence s)
        System.out.println("HelloWord.java".contains(".java"));//true

        //4,boolean endsWith(String suffix)
        System.out.println("HelloWord.java".endsWith(".java"));//true
        System.out.println("HelloWord.java".endsWith(".txt"));//false

        //5,boolean equals(Object anObject)
        System.out.println("ab".equals("ab"));//true
        System.out.println("ab".equals("cb"));//false

        //6,boolean equalsIgnoreCase(String anotherString)
        System.out.println("AB".equalsIgnoreCase("ab"));//true

        //7,byte[] getBytes()
        byte[] bytes = "abcdef".getBytes();
        System.out.println(Arrays.toString(bytes));//[97, 98, 99, 100, 101, 102]

        //8,int indexOf(String str)
        System.out.println("python,java,c++".indexOf("c++"));//12

        //9,boolean isEmpty()
        System.out.println("".isEmpty());//true
        System.out.println(" ".isEmpty());//false

        //10,int length()
        System.out.println("abc".length());//3

        //11,int lastIndexOf(String str)
        System.out.println("python,java,c++,python,java,c++".lastIndexOf("c++"));//28

        //12,String replace(CharSequence target, CharSequence replacement)

        String s = "http://www.baidu.com".replace("http://","https://");
        System.out.println(s);// https://www.baidu.com
        String ss = "www.baidu.com".replace("baidu","google");
        System.out.println(ss);
        //13,String[] split(String regex) 是以某个字符串来分割
        String[] s1 = "1989-19-12".split("-");
        System.out.println(Arrays.toString(s1));//[1989, 19, 12]

        //14,boolean startsWith(String prefix)
        System.out.println("HelloWord.java".contains(".java"));//false

        //15,String substring(int beginIndex)  截取字符串
        System.out.println("http://www.baidu.com".substring(7));//www.baidu.com

        //16,String substring(int beginIndex, int endIndex)
        System.out.println("http://www.baidu.com".substring(7,10));//www

        //17,char[] toCharArray()
        char[] chars = "中国人".toCharArray();
        System.out.println(Arrays.toString(chars));//[中, 国, 人]

        //18,String toLowerCase()
        System.out.println("ABAJS".toLowerCase());//abajs

        //19,String toUpperCase()
        System.out.println("abcdl".toUpperCase());//ABCDL

        //20,String trim()
        System.out.println("       shi     sji       ".trim());//shi     sji

        //21,static String valueOf(参数)
        String  s3 =  String.valueOf(true);
        System.out.println(s3);//"true"

        //22,String intern()
        new String("Hello").intern();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值