首页 > 编程语言 > 详细

【Java常用类之String类18】

时间:2020-06-17 18:24:38      阅读:57      评论:0      收藏:0      [点我收藏+]

一、String类

1、JDK自带的字符串类型

2、String类型的字符串对象,一旦创建不可改变,因为String底层采用的是"private final char value[];",abc字符串只能是abc,不能是abcd或者ab

3、JDK对字符串类型做了一些特殊的处理

  因为字符串使用的频率太高,为了提高字符串对象访问效率,引入了“字符串常量池”。字符串常量池在方法区中。

  字符串常量池在方法区中,字符串常量池其实就是一个“缓存”(缓存是提高程序执行效率的重要手段)

4、字符串对象的访问原理:

  在Java程序中一旦遇到“双引号”,就会在字符串的方法区常量中去搜索该字符串对象,,如果搜索到的话就直接使用,如果搜索不到的话直接在字符串常量池中创建一个。

  堆区中是运行期分配的,常量池中是编译器分配的。

引用放栈区,对象放堆区,常量放方法区

例一:

package com.JavaStudy.wrapperString0617;

/**
 * @Author wufq
 * @Date 2020/6/17 14:45
 */
public class StringTest01 {

    public static void main(String[] args){
        String s1 = "abc";//s1指向方法区字符串常量中的abc对象
        s1 = "def"; //s1指向方法区字符串常量中的def对象

        System.out.println(s1);  //def   --->从上面可以看出String指向对象不能改变,但是值是可以被修改的

        //方法去中保存了三个String类型的对象:分别是hello,world和helloworld!
        String s2 = "hello"+"world!";
        System.out.println(s2); //helloworld!
    }
}

例2:

package com.JavaStudy.wrapperString0617;

/**
 * @Author wufq
 * @Date 2020/6/17 15:52
 */
public class StringTest02 {
    public static void main(String[] args){
        //不同的引用指向同一个字符串常量,内存地址是相同的
        String s1 = "hello";
        String s2 = "hello";
        System.out.println(s1==s2);//true

        //采用new关键字创建的String字符串,会在方法区中保存一个内存地址,堆区中保存两个内存地址
        String s3 = new String("ABC");
        String s4 = new String("ABC");
        System.out.println(s3==s4); //false

        //比较两个字符串的值是否一样,必须使用equals方法
        //String类已经重写了Object类里面的equals方法(即:覆盖了Object的),比较的不是内存地址,而是字符串内容
        System.out.println(s3.equals(s4));//true

        //String类重写了toString方法,获取的字符串本身的内容
        System.out.println(s3.toString());

    }
}

二、关于字符串对象的构造

package com.JavaStudy.wrapperString0617;

/**
 * @Author wufq
 * @Date 2020/6/17 16:42
 * 字符串对象的构造
 */
public class StringTest03 {
    public static void main(String[] args){
        //第一种
        String s1 = "abc";

        //第二种
        String s2 = new String ("abc");

        //第三种:把byte类型的数组转换成字符串
        byte[] bytes = {97,98,99};//a b c 在ASII中的值就是97,98,99
        String s3 = new String(bytes);

        //第四种:把byte类型的数组其中的几个数据转换成字符串
        String s4 = new String(bytes,1,2);//1代表的是从第几个开始,2代表的是长度,即从byte1数组的第一个数开始,一共取两个

        //第五种:把char类型的数据转换成字符串
        char[] chars = {‘a‘,‘b‘,‘c‘};
        String s5 = new String(chars);

        //第六种:把chars类型的数组其中的几个数据转换成字符串
        String s6 = new String(chars,1,2);

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
        System.out.println(s5);
        System.out.println(s6);
    }
}

=====执行结果=====
abc
abc
abc
bc
abc
bc

三、String的常用方法

endWith:判断字符串是否以指定的后缀结束

statrtWith:判断字符串是否以指定的前缀开始

equals:字符串相等比较,不忽略大小写

equalsIgnoreCase:字符串相等比较,忽略大小写

index0f:取的制定字符在字符串的位置

lastIndex0f:返回最后一次字符串出现的位置

length:取得字符串的长度

replaceAll:替换字符串指定的内容

split:根据指定的表达式拆分字符串

substring:截子串

trim:去首尾空格

valus0f:将其他类型转换成字符串

 

【Java常用类之String类18】

原文:https://www.cnblogs.com/frankruby/p/13153926.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!