@

一、前言(可忽略)

作者是一位自学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. Codeforces Round #550 (Div. 3) F. Graph Without Long Directed Paths (二分图染色)

    题意:有\(n\)个点和\(m\)条无向边,现在让你给你这\(m\)条边赋方向,但是要满足任意一条边的路径都不能大于\(1\),问是否有满足条件的构造方向,如果有,输出一个二进制串,表示所给的边的方向 ...

  2. C# 网络流

    流(stream)是对串行传输的数据的一种抽象表示,底层的设备可以是文件.外部设备.主存.网络套接字等等. 流有三种基本的操作:写入.读取和查找. 如果数据从内存缓冲区传输到外部源,这样的流叫作&qu ...

  3. .NetCore快速上手Consul,留给自己一点思考的空间

    互联网热潮下,"微服务"技术架构成为了一种高大上的技术,其顾名思义就是将传统的大的业务服务拆分成独立的小服务,当拆分的服务慢慢多起来的时候,我们会发现服务地址很难管理,传统的方式一 ...

  4. Nginx基础 - HTTPS安全web服务

    1.HTTPS配置语法 Syntax: ssl on | off; Default: ssl off; Context: http, server Syntax: ssl_certificate fi ...

  5. 痞子衡嵌入式:我的博文总量终于追平了jicheng0622

    自打2016年10月选定清爽又复古的博客园平台作为痞子衡的个人博客主战场之后,痞子衡就一直坚持在博客园首发原创技术文章,然后再同步到其他平台(CSDN,知乎,微信公众号...),在坚持更文近四年半(2 ...

  6. nodemon all in one

    nodemon all in one https://nodemon.io/ https://github.com/remy/nodemon#nodemon https://www.npmjs.com ...

  7. CSS BFC in depth

    CSS BFC in depth BFC (Block Formatting Context) https://developer.mozilla.org/en-US/docs/Web/Guide/C ...

  8. 超强嘉宾阵容——NGK Global启动大会圆满举办

    近日,由星盟全球投资公司.灵石团队联合主办的NGK Global全球生态启动大会圆满开幕.大会汇集区块链领域.金融领域.密码学领域.智能算法领域等众多大咖,和NGK Global全球价值共识者共聚一堂 ...

  9. CodeMirror动态修改代码(关键: editor.getDoc().setValue(data); editor.refresh();)

    在使用codemirror时,其原理是根据form中的textarea标签,自动加载其内容,获得代码行的显示.(具体使用方式参见 codemirror官网使用手册 http://codemirror. ...

  10. Unity3d 拖拽脚本报错Can't add the script component "" because the script class cannot be found

    解决办法: ①报错原因:文件名与文件内容中的类名不相符. ②关闭360.鲁大师等防护软件,重新安装系统.