@

一、前言(可忽略)

作者是一位自学JAVA的小白,通过网上视频学习和自己对String类的理解,现将自己对String类的认知描述如下:(希望能与各位同行好友共同分享自己所学的java知识,同时,也热切期望各位同行前辈能够帮助作者指出不足,让小白的编程技术能更上一层楼,感谢各位同行大佬。

String是一种引用类型,通过存储、引用方法区字符串常量池中对应的字符串的地址来实现存储、赋值等一系列相应的操作,字符串存储在方法区字符串常量池中,在已有的基础上不会新建。垃圾回收器不会释放常量。

二、String变量的认知

String引用变量直接字符串赋值

(深入原理:是将字符串的内存地址赋值给变量,然后String变量通过索引内存地址找到位于字符串常量地址池中的字符串)

(小白理解:String是一种引用类型,通过引用字符串内存地址来调用字符串,JVM不会在已有的基础上新建或者释放字符串)

例一:

   public static void main(String[] args) {
String name="hello";
String name1="hello";
System.out.println(name==name1);//比较的是字符串内存地址

输出:

true

例二:

但这种情况不是

        String i=new String("abc");
String j=new String("abc");
System.out.println(i==j);

输出

false

因为new是在堆内存创建Sring对象来保存在字符串常量池中的String对象(字符串)的内存地址

i和j保存的是在堆内存中的String对象的内存地址

并不是在字符串常量池中的String对象(字符串)的内存地址

如要使new的对象输出为true,则必须调用String.equals方法

         System.out.println(i.equals(j));//true,但可能报空指针异常
//最好这样写:(来自一位资历深厚的程序员,虽不是我)
System.out.println("abc".equals(j));
System.out.println(name);//注意:直接输出String引用变量会直接调用重写toString方法

三、String类的构造方法

 String s=new String(""); //s1指向堆内存中new的String对象,由该String对象保存字符串的内存地址,
String s1=""; 通过创建String对象来引用字符串
String s2=new String(char 数组); //将char数组内的元素转换成字符串
String s3=new String(char 数组,offset(起始下标),coute(长度));//将char数组内起始下标为i往后j个长度的元素转换为字符串
String s4=new String(byte 数组);//将byte数组内的元素转换成字符串
String s3=new String(byte 数组,起始下标,长度); //将byte数组内起始下标为i往后j个长度的元素转换为字符串

以上是常用的,实在不行,自己看源码或者API(英文可以找英文,中文不行找语文老师)。

四、String类的基本方法

4.1 toString()方法

     public String toString()

     作用:将对象转换成字符串,

        Exercise string=new Exercise();
System.out.println(string.toString());

     输出:该对象的包名.类名@该对象的内存地址

一般使用的话,是输出该对象构造函数的参数,改写toString()方法成我们想要输出的格式

返回需求形式

   public String toString()
{
return year+"年"+month+"月"+day+"日";
}

注意:输出String对象不必重写toString()方法,问就是已经写好了(看源码)。

4.2 equals()方法

    public boolean equals(Object anObject)

    作用:比较两个对象的内存地址是否相等

一般使用的话,是比较两个对象的内容(构造函数的参数)是否相等

    @Override
public boolean equals(Object obj) {
if (obj==null||!(obj instanceof Exercise)){
return false;
}
if (obj==this){
return true;
}
Exercise exercise=(Exercise)obj;
if (this.id==exercise.id&&this.name==exercise.name)//比较构造函数的参数
{
return true;
}
return false;
}

注意:比较两个对象不能用“==”,因为java中是看两个对象的内存地址,如比较两个对象是否相同或内容相同,必须重写equals()方法。

        String string=new String();
String string1=new String();
System.out.println(string==string1);//false

4.3 equalsIgnoreCase()方法

    public boolean equalsIgnoreCase(String anotherString)

    参数:anotherString - 与此 String 进行比较的 String。

    作用: 忽略字母大小写比较字符串大小

        System.out.println("ABC".equalsIgnoreCase("abc")); //忽略字母大小写比较字符串大小

4.4 getBytes()方法

    public byte[] getBytes()

    作用:将字符串的字符转换成对应的Byte组元素

        String string3="abc";
byte []Byte=string3.getBytes();
//将字符串的字符转换成对应的Byte组元素
for (int i = 0; i <Byte.length ; i++) {
System.out.println( Byte[i]);
}

4.5 indexOf()方法

    作用:查找某个字符串在当前字符串第一次出现的下标

        String string4="ABCDefG";
String string5="G";
System.out.println("ABCDefG".indexOf("G"));//6
//查找某个字符串在当前字符串第一次出现的下标

4.6 lastindexOf()方法

    作用:查找某个字符串在当前字符串中最后一次出现的下标

        System.out.println("GABCDefG".lastIndexOf("G"));//7

4.7 charAt( )方法

    public char charAt(int index)

    参数:index-索引,下标

    作用:字符串是一个String对象,String对象能调用方法charAt(索引指定处的值)

           char c="China".charAt(1);//字符串是一个String对象,String对象能调用方法charAt(索引指定处的值)
System.out.println(c);//h

4.8 compareTo()方法

    作用:compareTo方法比较字符串大小(拿着第一个字符串的第一个字符与后面字符串的第一个字符一一对应比较

           int result="abc".compareTo("abc");
//compareTo方法比较字符串大小(拿着第一个字符串的第一个字符与后面字符串的第一个字符一一对应比较
System.out.println(result);//=0 前后一致 int result2="abc".compareTo("abcd");
System.out.println(result2);//=-1 前小后大 int result4="abcd".compareTo("abc");
System.out.println(result4);//=1 前大后小 int result3="abcd".compareTo("abce");
System.out.println(result3);//=-1 int result5="abce".compareTo("abcd");
System.out.println(result5);//=1

4.9 contains()方法

    作用:判断第一个字符串中是否包含第二个字符串 true包含 false 不包含

            System.out.println("Hello World!".contains("Hello"));
//判断第一个字符串中是否包含第二个字符串 true包含 false 不包含

4.10 startsWith()方法

     作用:测试字符串是否以某字符串开头

        System.out.println("2021-1-5".startsWith("2021"));//true
System.out.println("2021-1-5".startsWith("2020"));//false

4.11 endsWith()方法

     作用:判断第一个字符串是否以后面的字符串结尾

           System.out.println("I want to learn Java".endsWith("Java"));
//判断第一个字符串是否以后面的字符串结尾 true 是

4.12 isEmpty()方法

     作用:判断某个字符串是否为空

        System.out.println("程序猿江小白".isEmpty());//false
String string8="";
System.out.println(string8.isEmpty());//true

4.13 replace()方法

     作用: 将当前字符串中的某些字符串替换为指定字符串,并重新生成子字符串

System.out.println("ABCGEF".replace("G","D"));//ABCDEF

4.14 split()方法

     作用:以某个字符串为分隔符将当前字符串拆分成多个子字符串

String[]ymd="2021-1-2".split("-");
for (int i = 0; i <ymd.length ; i++) {
System.out.println(ymd[i]);
}
/**
* 2021
* 1
* 2
*/

String param="name=zhangliang&password=123&age=20";
//以"="或"|"为分隔符将当前字符串拆分成多个子字符串
String[] string10=param.split("=|&");//| 或
for (int k = 0; k <string10.length ; k++) {
System.out.println(string10[k]);
}
/**
* name
* zhangliang
* password
* 123
* age
* 20
*/

4.15 substring( )方法

     作用:截取父字符串,生成子字符串

        System.out.println("How should I face with my lost future".substring(13));
//face with my lost future
        //从beginIndex开始截取,截取endIndex-beginIndex个长度,到第endIndex-1位字符结束(不包括endIndex位字符)
System.out.println("How should I face with my lost future".substring(0,2));
//Ho

4.16 toCharArray()方法

     作用:将字符串转换成char数组

        char[]chars1="China".toCharArray();
for (int i = 0; i <chars1.length ; i++) {
System.out.println(chars1[i]);
}
/**
* C
* h
* i
* n
* a
*/

4.17 toLowerCase()方法

     作用:将字符串全部以小写字符表示

System.out.println("AMeriCAN".toLowerCase());//american

4.18 toUpperCase()方法

     作用:将字符串全部以大写字符表示

 System.out.println("chIna".toUpperCase());//CHINA

4.19 trim()方法

     作用:去除字符串前后的空白

 System.out.println("       time        ".trim());//time
System.out.println(" love story ".trim());//love story//

4.20 valueof()方法

     作用:将非字符串转换成字符串

/**
* String中唯一的静态方法独苗
* String.valueof
* 作用:将非字符串转换成字符串
*/
String string1=String.valueOf(new StringTest02());
/**
* valueof方法,在参数为一个对象时,如果该对象没有重写toString()底层会自
* 动调用object.toString方法
* 为什么输出引用的时候,会调用toString()方法
* 因为println底层是调用的valueof(),而valueof()底层调用的是obj的toString
* 方法
* System.out.println()打印输出时都是先转换成字符串
*/ System.out.println(string1);

4.21 StringBuffer()方法与StringBuilder()方法

     作用:拼接字符串

        StringBuffer stringBuffer=new StringBuffer();
//指定初始化容量的StringBuffer对象(字符串缓冲区对象)默认初始化16个长度的byte数组
stringBuffer.append("A");//拼接字符串调用append进行追加,如果byte数组满了会自动扩容
stringBuffer.append("B");
stringBuffer.append("C");
System.out.println(stringBuffer);//ABC StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("a");
stringBuilder.append("b");
stringBuilder.append("c");
System.out.println(stringBuilder);//abc
/**
* StringBuffer与StringBuilder的区别
* StringBuffer中的方法都有:synchronized关键字修饰。表示StringBuffer在多线程环境下运行是安全的
* StringBuilder中的方法没有,表示在多线程环境下是不安全的,但效率较高
*/

#String类简述(小白理解,小白编写,欢迎大神指点,小白跪谢)的更多相关文章

  1. 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  2. String类的深入理解

    String不是基本数据类型,String和8种包装类型是不可变类.String和8种基本数据类型采用值传递. 关于方法区中的常量区和class文件中的常量区的关系,参考:https://www.cn ...

  3. webServices 执行流程,(我是菜鸟,我怕谁,仅代表个人理解,欢迎各位大神们指导,不和您的胃口,请默默离开!!)

    二.上图仅仅代表个人理解,下面以代码方式解释一下. (1) strtus.xml <?xml version="1.0" encoding="UTF-8" ...

  4. php 自制简单路由类 望大神指点

    class route{ /** @var null 模块 */ private static $module = null; /** @var null 控制器 */ private static ...

  5. hibernate中.hbm.xml和注解方式自动生成数据表的简单实例(由新手小白编写,仅适用新手小白)

    绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xm ...

  6. Java基础系列2:深入理解String类

    Java基础系列2:深入理解String类 String是Java中最为常用的数据类型之一,也是面试中比较常被问到的基础知识点,本篇就聊聊Java中的String.主要包括如下的五个内容: Strin ...

  7. 从C# String类理解Unicode(UTF8/UTF16)

    上一篇博客:从字节理解Unicode(UTF8/UTF16).这次我将从C# code 中再一次阐述上篇博客的内容. C# 代码看UTF8 代码如下: string test = "UTF- ...

  8. 跟着刚哥梳理java知识点——深入理解String类(九)

    一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...

  9. 深入理解Java String类(综合)

    在Java语言了中,所有类似“ABC”的字面值,都是String类的实例:String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较.查找.截取.大小写转换等操作:Java语 ...

随机推荐

  1. enumerate() -- Python

    #!usr/bin/env python #coding:utf-8 ''' enumerate()说明: 1.enumerate()是Python的内置函数: 2.enumerate字面上是枚举.列 ...

  2. scu-4440 rectangle (非原创)

    Rectangle frog has a piece of paper divided into nn rows and mm columns. Today, she would like to dr ...

  3. bzoj5312 冒险(吉司机线段树)题解

    题意: 已知\(n\)个数字,进行以下操作: \(1.\)区间\([L,R]\) 按位与\(x\) \(2.\)区间\([L,R]\) 按位或\(x\) \(3.\)区间\([L,R]\) 询问最大值 ...

  4. 二分类问题中混淆矩阵、PR以及AP评估指标

    仿照上篇博文对于混淆矩阵.ROC和AUC指标的探讨,本文简要讨论机器学习二分类问题中的混淆矩阵.PR以及AP评估指标:实际上,(ROC,AUC)与(PR,AP)指标对具有某种相似性. 按照循序渐进的原 ...

  5. Clipboard API

    Clipboard API click copy click copy demo clickGetNewsLink(data_ref = `newsLink`) { let that = this; ...

  6. 惠普机械键盘 K10GL 使用评测

    惠普机械键盘 GK100 使用评测 手感太差,不是 RGB 背光 惠普(HP) K10GL 机械键盘 有线 LED背光机械键盘 87键 混光青轴 refs https://item.jd.com/10 ...

  7. Windows 常用键盘快捷键:

    键盘快捷键 通过使用键盘快捷键可以节省时间. Windows 和 Mac 的键盘快捷键 在现代操作系统中和计算机软件程序中,键盘快捷键经常被使用. 使用键盘快捷键能帮您节省很多时间. 基本的快捷键 描 ...

  8. CSS font-weight all in one

    CSS font-weight all in one font-weight: bolder: 没毛病呀! /* 关键字值 */ font-weight: normal; font-weight: b ...

  9. How to implement an accurate countdown timer with js

    How to implement an accurate countdown timer with js 如何用 js 实现一个精确的倒计时器 原理剖析 web worker js custom ti ...

  10. css skeleton loading & skeleton components

    css skeleton loading css & :empty See the Pen Skeleton Screen with CSS by xgqfrms (@xgqfrms) on ...