@

一、前言(可忽略)

作者是一位自学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. 洛谷-P1469 找筷子 (位运算)

    题意:给你一组数,求数组中唯一的出现次数为奇数的那个数. 题解:这题其实直接桶排一下就行了,但是最后一个点会TLE. ​ 后来了解到这题可以用位运算来解决: ​ ^(异或)运算符:用于比较两个二进制数 ...

  2. P站风格的DevTools主题

    Chrome插件地址:https://chrome.google.com/webstore/detail/material-devtools-theme-c/jmefikbdhgocdjeejjnne ...

  3. CentOS6下mysql的安装与配置

    CentOS是免费的.开源的.可以重新分发的开源操作系统,CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一. ...

  4. meidi

    最近觉得某些公司的选择题也是很基础,非常值得总结回味.今天做了美的的笔试,20道选择题(单选14+6多选).特此记录如下(部分忘了烦请见谅): 1. 是我昨晚刚刚总结的List,Set,Map的区别: ...

  5. Leetcode(104)-二叉树的最大深度

    给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例:给定二叉树 [3,9,20,null,null,15,7], ...

  6. 6. Connection has already been closed 数据库连接被关闭

    生产上Tomcat出现 Connection has already been closed.问题,但是在uat测试是好的! 遇见两次: 1.某个程序dao中执行逻辑异常复杂,有时候需要执行一分多钟, ...

  7. 图片转tfrecords

    import numpy as np import tensorflow as tf import time import os import cv2 from sklearn.utils impor ...

  8. macOS & pbcopy

    macOS & pbcopy copy from command line pbcopy $ whoami | pbcopy # xgqfrms-mbp $ echo "hello, ...

  9. PyCharm 中文 字符 python 报错 的 完美 解决方案!

    PyCharm 中文 字符 python 报错 的 完美 解决方案! #_*_ coding:utf-8_*_ https://www.python.org/dev/peps/pep-0263/ 到p ...

  10. CSS BFC in depth

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