常用类-String

常用类

String

java.lang.String

  1. String表示字符串类型,属于引用数据类型,不属于基本数据类型。

  2. 在Java中随便使用双引号括起来的都是String对象。例如“abc”这是一个String对象

  3. Java中规定,双引号括起来的字符串,是不可变的,也就是说“abc”自出生到死亡,不可变

  4. 在JDK当中双引号括起来的字符串,都是直接储存在“方法区“的”常量池”中的

    在实际开发中,字符串使用的太频率。为了执行效率,sun公司就把字符串放到了方法区中的常量池当中

内存分析

		String s1 = "abcdef";
        String s2 = "abcdef" + "xy";

        String s3 = new String("xy");

(img-yDM73WeA-1596013907518)(E:\学习\Topora\常用类\未命名文件.jpg)]

public class User {
    private int id;
    private String name;

    public User() {
    }

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class UserTest {
    public static void main(String[] args) {
        User user = new User(110,"张三");
    }
}

在这里插入图片描述

  String s1 = "456123";
        String s2 = "456123";

        System.out.println(s1 == s2);//true s1和s2指向相同的字符串常量
String x = new String("xyz");
String y = new String("xyz");
System.out.println(x == y);//false  x和y指向不同的String对象  String对象指向了相同的字符串常量
//判断字符串是否相等不能用 ==

System.out.println(x.equals(y));//true  String类重写了equals方法
System.out.println("xyz".equals(y));//"xyz"是一个String对象。只要是对象都能调用方法。

垃圾回收器不会释放常量池里的东西

//i中保存的是100这个值
int i = 100;
//s中保存的是s的内存地址
String s = "abc"

面试题

/*
分许以下程序一共创建了几个String对象
 */
public class StringTest03 {
    public static void main(String[] args) {
        /*
        方法区常量池中有一个:"xyz"
        堆中有两个String对象
        */
        String s1 = new String("xyz");
        String s2 = new String("xyz");

    }
}

String类中常用的构造方法

  1. String s = new String(“”);
  2. String s = “”;//最常用
  3. String s = new String(char数组);
  4. String s = new String(char数组,起始下标,长度);
  5. String s = new String(byte数组);
  6. String s = new String(byte数组,起始下标,长度);
		byte[] bytes = {97,98,99};//97是a,98是b,99是c
        String s2 = new String(bytes);
        System.out.println(s2);//abc
		System.out.println(s2.toString());//abc   结果一致

输出一个引用的时候,会自动调用toString方法,默认Objext的话,会自动输出对象的内存地址

输出字符串对象的话,输出的不是对象的内存地址,而是字符串本身。

//String (字节数组,下标起始位置,长度)
String s3 = new String(bytes,1,2);
System.out.println(s3);//bc

其他类型同理

char[] c = {'我','是','中','国','人'};
String s4 = new String(c);
System.out.println(s4);//我是中国人
String s5 = new String(c,2,3);
System.out.println(s5);//中国人
String s6 = new String("helloWorld");
System.out.println(s6);//helloWorld

常用方法

  1. (掌握)boolean . charAt(int index)

     char c = "中国人".charAt(1);
            System.out.println(c);//国
    
  2. (了解)int .compareTo(String anotherString);

    字符串之间比较不能直接使用>< , 需要使用compareTo方法

    System.out.println("abcd".compareTo("abcd"));//0  前后一致
            System.out.println("abcd".compareTo("abce"));//-1  前大后小
            System.out.println("abce".compareTo("abcd"));//1	前小后大  
    //如果第一个能比较出结果 后面无需比较
    
  3. (掌握)boolean .contains(CharSequence s)

//判断前面的字符串是否包含后面的字符串
System.out.println("Helloworld.java".contains("world"));//true
System.out.println("Helloworld.java".contains("worldwide"));//false
  1. (掌握) boolean .endsWith(String suffix)

    //判断当前字符串是否以某个字符串结尾
    System.out.println("Helloworld.java".endsWith("java"));//true
    System.out.println("Helloworld.java".endsWith("javase"));//false
    
  2. (掌握)boolean .equals(Object anObject)

    //比较两个字符串必须使用equals方法,不能使用"=="
    //相对compareTo更加高效 底层时把两个字符串转换为两个byte数组  然后进行比较
    System.out.println("abcd".equals("abcd"));//true
    System.out.println("abcd".equals("abce"));//false
    
  3. (掌握)boolean .equalsIgnoreCase(String anotherString)

    //判断两个字符串是否相等,并且同时忽略大小写
    System.out.println("abcd".equalsIgnoreCase("ABCD"));//true
    
  4. (掌握) byte[] .getBytes(String charsetName)

    byte[] bytes = "abcd".getBytes();
            for (int i = 0; i < bytes.length; i++) {
                System.out.print(bytes[i] + " ");
            }//97 98 99 100
    
  5. (掌握) int .indexOf(String str)

    //判断某个字符串在当前字符串第一次出现处的索引(下标)。
            System.out.println("javac++c#pythonphp".indexOf("c++"));//4
    
  6. (掌握)boolean .isEmpty()

    //判断某个字符串否为空  底层代码为判断字符串的长度是否为零
    System.out.println("".isEmpty());//true 空返回true  非空返回false
    
  7. (掌握)int .length()

    面试题:判断数组的长度是length属性,判断字符串长度是length()方法

     System.out.println("abc".length());//3
    
  8. (掌握)int .lastIndexOf(String str)

    //判断某个字符串在当前字符串最后一次出现处的索引(下标)。
            System.out.println("javac++c#pythonphpjava".lastIndexOf("java"));//18
    
  9. (掌握)String .replace(char oldChar, char newChar)

    String .replace(CharSequence target, CharSequence replacement)

    //只能换单个字符 
    System.out.println("我是一只小小小小niao".replace('n','鸟'));//我是一直小小小小鸟iao
    //换字符串
    System.out.println("我是一只小小小小niao".replace("niao", "鸟"));//我是一直小小小小鸟
    System.out.println("我是一只小小小小niao".replace("小小", "鸟"));//我是一直鸟鸟niao
    
  10. (掌握) String[] .split(String regex)

    String[] ymd = "2020-07-29".split("-");//"2020-07-29"以"-"为分割符进行拆分。
            for (int i = 0; i < ymd.length; i++) {
                System.out.println(ymd[i]);
            }//2020 07 29
    
  11. (掌握)boolean .startsWith(String prefix)

    //判断当前字符串是否以某个字符串开始
    System.out.println("Helloworld.java".startsWith("Hello"));//true
    System.out.println("Helloworld.java".startsWith("ow"));//false
    
  12. (掌握)String substring(int beginIndex)

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

    beginIndex包括 endIndex不包括

    System.out.println("http://www.baidu.com".substring(11,16));//baidu
    
  14. (掌握)char[] toCharArray()

    char[] chars = "我是中国人".toCharArray();//将"我是中国人"转化为一个char数组
            for (int i = 0; i < chars.length; i++) {
                System.out.println(chars[i]);
            }
    
  15. (掌握)String toLowerCase()

    //将一个字符串转换为小写
    System.out.println("ABCDedGhijklMn".toLowerCase());//abcdedghijklmn
    
  16. (掌握)String toUpperCase()

    //将一个字符串转换为大写
    System.out.println("ABCDedGhijklMn".toUpperCase());//ABCDEDGHIJKLMN
    
  17. (掌握)String trim()

    System.out.println("             abcd    cdef         ".trim());//abcd    cdef
    
  18. (掌握)static String valueOf()

    String方法中唯一一个静态方法 可以把不是String类型的数组转化为String

    String s = String.valueOf(3.1415926);
            System.out.println(s);//3.1415926
    
    
    String s1 = String.valueOf(new Customer());
            System.out.println(s1);//突然暴躁
       //如果Customer没有重写toString方法 它会对象的地址
    
    //Customer类
     class Customer {
        //重写toString方法
    
         @Override
         public String toString() {
             return "突然暴燥";
         }
     }
    

拓展println:底层调用的是String.valueof()方法 当输出的是对象时,String.valueof()会调用toString方法

所以能够打印到控制台上的全部都是字符串

要记的东西真是又臭又长,无奈😔
加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值