#String类简述(小白理解,小白编写,欢迎大神指点,小白跪谢)
@
- 一、前言(可忽略)
- 二、String变量的认知
- 三、String类的构造方法
- 四、String类的基本方法
- 4.1 toString()方法
- 4.2 equals()方法
- 4.3 equalsIgnoreCase()方法
- 4.4 getBytes()方法
- 4.5 indexOf()方法
- 4.6 lastindexOf()方法
- 4.7 charAt( )方法
- 4.8 compareTo()方法
- 4.9 contains()方法
- 4.10 startsWith()方法
- 4.11 endsWith()方法
- 4.12 isEmpty()方法
- 4.13 replace()方法
- 4.14 split()方法
- 4.15 substring( )方法
- 4.16 toCharArray()方法
- 4.17 toLowerCase()方法
- 4.18 toUpperCase()方法
- 4.19 trim()方法
- 4.20 valueof()方法
- 4.21 StringBuffer()方法与StringBuilder()方法
一、前言(可忽略)
作者是一位自学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类简述(小白理解,小白编写,欢迎大神指点,小白跪谢)的更多相关文章
- 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- String类的深入理解
String不是基本数据类型,String和8种包装类型是不可变类.String和8种基本数据类型采用值传递. 关于方法区中的常量区和class文件中的常量区的关系,参考:https://www.cn ...
- webServices 执行流程,(我是菜鸟,我怕谁,仅代表个人理解,欢迎各位大神们指导,不和您的胃口,请默默离开!!)
二.上图仅仅代表个人理解,下面以代码方式解释一下. (1) strtus.xml <?xml version="1.0" encoding="UTF-8" ...
- php 自制简单路由类 望大神指点
class route{ /** @var null 模块 */ private static $module = null; /** @var null 控制器 */ private static ...
- hibernate中.hbm.xml和注解方式自动生成数据表的简单实例(由新手小白编写,仅适用新手小白)
绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xm ...
- Java基础系列2:深入理解String类
Java基础系列2:深入理解String类 String是Java中最为常用的数据类型之一,也是面试中比较常被问到的基础知识点,本篇就聊聊Java中的String.主要包括如下的五个内容: Strin ...
- 从C# String类理解Unicode(UTF8/UTF16)
上一篇博客:从字节理解Unicode(UTF8/UTF16).这次我将从C# code 中再一次阐述上篇博客的内容. C# 代码看UTF8 代码如下: string test = "UTF- ...
- 跟着刚哥梳理java知识点——深入理解String类(九)
一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...
- 深入理解Java String类(综合)
在Java语言了中,所有类似“ABC”的字面值,都是String类的实例:String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较.查找.截取.大小写转换等操作:Java语 ...
随机推荐
- 【luogu AT3957】[AGC023F] 01 on Tree
01 on Tree 题目链接:luogu AT3957 题目大意 有一棵根为 \(1\) 的树,每个节点有个值 \(0\) 或 \(1\). 然后每次你可以把一个没有父亲的点删除,然后把值放进一个数 ...
- spark 一、编程指南
总览 第一.每个spark 应用都有一个驱动程序去运行着主函数和再每个节点上的并行操作. spark提供了一个RDD(弹性分布式数据集)的数据集合,可以通过不同的节点并行操作运算,可以通过hdfs文件 ...
- Chapter Zero 0.1.2 CPU的架构
CPU的架构 CPU内部含有一些微指令, 我们所使用的软件都要经过CPU内部的微指令集达成才行. 这些指令集的设计又分为两种设计理念, 这就是目前世界上常见的两种主要CPU架构: 精简指令集(Redu ...
- C++ part3
函数和const references: C++中const用于函数重载 有些情况可以重载,有些不行,具体看↑. 隐式类型转换 references: nowcoder 对于内置类型,低精度的变量给高 ...
- LVS之DR模式部署
一.LVS-DR数据包流向分析 为方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经的路线为1-2-3-41.Client 向目标 VIP 发出请求,Director(负载均衡器)接 ...
- website URL & UTM
website URL & UTM UTM user track message utm_source https://zhuanlan.zhihu.com/p/143473571?utm_s ...
- onsen & UI & vue & mobile UI
onsen & UI vue & mobile UI $ npm i onsenui vue-onsenui # OR $ npm i -S onsenui vue-onsenui h ...
- linux & node & cli & exit(0) & exit(1)
linux & node & cli & exit(0) & exit(1) exit(0) & exit(1) demo exit(0) === OK exi ...
- npm & cmd & bash & bin
npm & cmd & bash & bin bin node_modules & nested npm publish & all src files npm ...
- true && number !== boolean
true && number !== boolean bug let result = ``; // section, name ? create text, compute cent ...