认识String类(Java)

1.创建字符串

2.字符串比较相等

3.字符串常量池

4.理解字符串不可变

5.字符、字节与字符串

6.字符串常见操作

7. StringBuffer 和 StringBuilder

这一块主要会谈到String类的基本用法和常见操作,字符串常量池,常见操作以及StringBuffer和StringBuilder。

1.创建字符串

创建字符串有三种方式

        //方式1
        String str = "hello";
        //方式2
        String str2 = new String("hello");
        //方式3
        char[] arr = {'a','b','c'};
        String str3 = new String(arr);

内存布局如下:
在这里插入图片描述

只要是双引号引起来的,如“hello”,都会被存到字符串常量池当中,且一旦一个字符串常量被存储到常量池当中后,如果后续还有相同的字符串要存放,首先要看当前常量池中是否有该字符串常量。同时,由上图可以看出,修改str的值对str2是没有影响的。

2.字符串比较相等

1.“==”比较的时候有两种情况

等号两边是简单类型,直接比较

    public static void main(String[] args) {
        int x = 10;
        int y = 10;
        System.out.println(x == y);
    }

结果为:

true

引用类型:引用是否相同(情况较多)

    public static void main(String[] args) {
        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println(str1 == str2);
        }

结果为:

false

第二种:

   public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "he" + "llo";
        System.out.println(str1 == str2);
        }

结果为:

true

编译期间:str2就是“hello”,在字符串常量区,所有引用相同。

第三种:

    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "he" ;
        String str3 = str2 + "llo";
        System.out.println(str1 == str3);
        }

结果为:

false

String使用“==”并不是比较字符串的内容,而是比较两个引用是否指向同一个对象。要想比较字符串的内容,必须采用String提供的equals方法

        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println(str1.equals(str2));

这时候的运行结果就是true了。

3.字符串常量池

       String str1 = "hello";
        String str2 = new String("hello");
        System.out.println(str1 == str2);

str1和str2不相等的原因是,str1在字符串常量池当中,而str2不在字符串常量池中。我们可以使用String的intern方法手动把String对象加入到字符串常量池中。

        String str1 = "hello";
        String str2 = new String("hello").intern();
        System.out.println(str1 == str2);

此时运行的结果为:

true

intern():将对象的引用存入到字符串常量池中,检查常量池中是否含有“hello”,如果有,返回常量池的引用给str2.

4.理解字符串不可变

一个栗子!~

         String str = "hello";
          str += "world";
          str +="!";
        System.out.println(str);

结果为:

helloworld!

内存布局如下:
在这里插入图片描述
如果需要修改字符串,则借助“substring()”来修改。

          String str = "Hello";
          //修改1号下标以后的内容
          str = "h" +str.substring(1);
          System.out.println(str);

运行结果:

hello

5.字符、字节与字符串

字符与字符串

1、获取指定位置字符

          String str = "Hello";
        System.out.println(str.charAt(0));

结果为:

H

2、字符串与字符数组转换
toCharArray()

          String str = "Hello";
          char[] data = str.toCharArray();
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i] + " ");
        }

运行结果:

H e l l o 

2、字节与字符串

        String str = "Hello";
          //String转byte[]
        byte[] data = str.getBytes();
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i] + " ");
        }
        //byte[] 转 String
        System.out.println(new String(data));

6.字符串常见操作

1.字符串比较

        String str1 = "hello";
        String str2 = "Hello";
        //不区分大小写比较
        System.out.println(str1.equals(str2));
        //区分大小写比较
        System.out.println(str1.equalsIgnoreCase(str2));
        //comepareTo比较,区分大小写
        System.out.println(str1.compareTo(str2));

结果为:

false
true
32

2.字符串查找

 public static void main(String[] args) {
        //最好用最方便的就是contains
        String str = "hello";
        System.out.println(str.contains("xx"));

        //使用indexOf()方法进行位置查找
        String str2 = "helloworld";
        System.out.println(str2.indexOf("wor"));//5,从w开始索引
        System.out.println(str2.indexOf("bit"));//-1没有查到
        if(str2.indexOf("hello") != -1) {
            System.out.println("查到了!");
        }
        
        //判断开头或结尾
        String str3 = "**qwdseihd123";
        System.out.println(str3.startsWith("*"));
        System.out.println(str3.endsWith("2"));
    }
  }

运行结果:

false
5
-1
查到了!
true
false

3.字符串替换

public static void main(String[] args) {
        String str = "hello";
        //替换所有相同字符
        System.out.println(str.replaceAll("l","o"));
        //替换一个字符
        System.out.println(str.replaceFirst("l","0"));
    }
 }

运行结果:

heooo
he0lo

4.字符串拆分

拆分一次

    public static void main(String[] args) {
        String str = "hello world !!!";
        //按空格拆分
        String[] result = str.split(" ");
        for (String s : result) {
            System.out.println(s);
        }

    }

结果为:

hello
world
!!!

拆分两次:

   public static void main(String[] args) {
        String str = "heu= iqh =hello world = !!!";
        String[] result = str.split(" ");
        for (String s : result) {
            String[] ss = s.split("=");
            for(String sss : ss) {
                System.out.println(sss);
            }
        }
    }

结果为:

heu
iqh

hello
world
!!!

5.字符串截取

   public static void main(String[] args) {
        String str = "helloworld";
        //索引从0开始
        System.out.println(str.substring(5));
        //前闭后开,表示从第二个元素索引到第五个元素
        System.out.println(str.substring(2,5));
    }

结果为:

world
llo

7. StringBuffer 和 StringBuilder

StringBuilder的使用实例

    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        //字符串拼接
        sb.append("hello").append("world");
        fun(sb);
        System.out.println(sb);
    }
    public static void fun(StringBuffer temp) {
        temp.append("\n").append("www");
    }

StringBuffer 和 StringBuilder和String的用法基本类似,但是String的内容无法修改,而StringBuffer的内容修改。String通过“+”进行拼接的时候,底层被优化为StringBuilder。StringBuffer 采用同步处理,属于线程安全操作;而StringBuilder未来用同步处理,属于线程不安全操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值