目录
前言:
上一篇文章辉仔回忆了关于类与对象的知识点。简单介绍了什么是类,什么是对象。类是对对象的描述,对象就是客观事物。这一期主要是讨论各种各样的封装方法。主要涉及String类。主要从它们是什么,他们怎么用从这两个方面分析。希望对大家有用!
辉仔每篇文章都是用心总结,如果有错误希望大家给我指正,如果大家觉得辉仔的文章帮助到你了,那么请给我来个一键三连!!!
标题一、String类
字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
1、创建格式:
最简单的创建String类莫过于以下格式:
String s =“点赞收藏与评论”;
在代码中,遇到像字符串中的常量,这里的常量是“点赞收藏与评论”,编译器会建一个s的对象,然后将常量值放在公共池里面。
既然字符串是对象,那么可以用构造器创造对象。
构造方法创建字符串。
String s1 =new String ("点赞收藏与评论");
2、直接赋值和构造方法的内存区别
String s ="点赞收藏与评论";
String s2="点赞收藏与评论";//共用一个常量,只有一个对象
String s1 =new String("点赞收藏与评论");//拥有两个对象
内存示意图:
在用直接赋值时,jvm会创建对象,把“点赞收藏与评论”放在堆内存里的常量池里。(记住相同的值只会存在一个)。当谁需要使用时,常量池里的值把对象返回回去。也就是s和s2在有相同的常量值的时候。会把相同的地址赋值给s或s2,也就是可以共享。
但是在用构造方法创建时就会不同,在面对s时会创建一个对象,遇见new又会创建一个对象,将“点赞收藏与评论”放在new的内存里。调用的时候便不会使用常量池里的内容。如果再创建一个新的构造方法,但是具有相同的“点赞收藏与评论”,现实情况是不会调用原来的地址赋值,而是创建新的地址。造成了内存空间的浪费。所以一般都是用直接赋值。
3、构造方法
String有11种构造方法,目前我就只分享四种,其他的内容大家可以私信回复我。
直接看代码图!
public class Demo_2 {
public static void main(String[] args) {
/*创建一个空白字符串对象,不含有任何内容*/
String s1 = new String();
System.out.println("s1:" + s1);
/*(char[] chs)根据字符数组的内容,来创建字符串对象*/
char[] chs = {'a', 'b', 'c'};
String s2 = new String(chs);
System.out.println("s2:" + s2);
/*(byte[] bys)根据字节数组的内容,来创建字符串对象*/
byte[] bys = {97, 98, 99};
String s3 = new String(bys);
System.out.println("s3:" + s3);
/* s = “abc”;直接赋值的方式创建字符串对象,内容就是abc*/
String s4 = "abc";
System.out.println("s4:" + s4);
}
}
4、字符串的常用方法
字符串的长度
String 类的一个方法是 length() 方法,它返回字符串对象包含的字符数。
public class Demo_3 {
public static void main(String[] args) {
String jjj ="123456789";
jjj.length();
System.out.println(jjj.length());
输出为:9;
-------- ----------- ----------- --------- --------- --------- ------ ----- ------ -------- ------------
连接字符串
(1)使用操作符来连接
“可口”+“可乐”=“可口可乐”
(2) 使用 concat() 方法
Strings.concat(Strings1)
"美丽的新房子".concat("真漂亮")
-------- ----------- ----------- --------- --------- --------- ------ ----- ------ -------- ------------
遍历的方法
使用charAt()和length()方法
代码如下:
public class Demo_5 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
String jjj = sc.nextLine();//字符串的遍历
for (int i=0;i<jjj.length();i++) {
System.out.println(jjj.charAt(i));
}
5、String类型的所有方法
ps:转自菜鸟教程
标题二、StringBuilder
1.String与StringBuilder的异同
在我们学习的过程中如果创建字符串,然后直接赋值,如果拼接的话,会不会在内存的常量池中,是把两个地址值合并一起然后原来的地址值消失呢?根据String的不可变的特性,那么原来的地址值不可能消失。那么只有一种可能性,就是再创建一个值在常量池。
如图:
经过编译后,jvm执行,sup对象名放在栈内存里,在常量池创建一个新的值“收藏”,sup1的值也在常量池创建一个新的对象“点赞”。如果要进行拼接操作,那么不会使引用两个原来值的地址,是再创建一个新的地址“收藏点赞”,将新的地址给sup3.那么这样做必定会浪费许多时间和内存空间。那么有没有更好的方法,像数组一样随时修改呢。这里辉仔向大家介绍StringBuilder,它的特性是可进行修改,且速度快。就像图中的sup4中的内容我可以随意修改。地址值都是一样的。
String:内容不可变。
StringBuilder:内容可变。
读到这里辉仔就相信你就理解了String与StringBuilder的区别了!
2、创建格式
-
-
Constructor
描述 StringBuilder()
构造一个没有字符的字符串构建器,初始容量为16个字符。
StringBuilder(int capacity)
构造一个没有字符的字符串构建器,以及由
capacity
参数指定的初始容量。StringBuilder(CharSequence seq)
构造一个字符串构建器,其中包含与指定的
CharSequence
相同的字符。StringBuilder(String str)
构造一个初始化为指定字符串内容的字符串构建器。
-
以上表格转于JDK
代码如下:
StringBuilder app = new StringBuilder();
System.out.println("点赞收藏与转发");
StringBuilder app2 = new StringBuilder("点赞收藏与转发");
System.out.println(app2);
3、常用的方法
这里辉仔将介绍4个StringBuilder的常用方法。
(1)public StringBuilder append(...):将char参数的字符串类型添加到里面,返回长度加1.
StringBuilder app = new StringBuilder(); app.append(点赞); app.append("收藏"); app.append("与转发"); System.out.println(app);输出效果 :点赞收藏与转发
(2)public StringBuilder reverse():导致该字符序列被反序列的相反代替
app.reverse(); System.out.println(app);输出效果:发转与藏收赞点
(3)public String toString():将当前StringBuilder对象转换为String对象。
//StringBuilder转换成String StringBuilder spp= new StringBuilder("点赞收藏与转发"); String change = spp.toString(); System.out.println(change);
(4)StringBuilder deleteCharAt(int index):char按此顺序删除指定位置。
StringBuilder spp= new StringBuilder("点赞收藏与转发"); String qq = spp.toString(); System.out.println(qq); spp.deleteCharAt(1); System.out.println(spp);输出效果:
点赞收藏与转发
点收藏与转发
4、全部方法
变量和类型 | 方法 | 描述 |
---|---|---|
StringBuilder | append(boolean b) | 将 |
StringBuilder | append(char c) | 将 |
StringBuilder | append(char[] str) | 将 |
StringBuilder | append(char[] str, int offset, int len) | 将 |
StringBuilder | append(double d) | 将 |
StringBuilder | append(float f) | 将 |
StringBuilder | append(int i) | 将 |
StringBuilder | append(long lng) | 将 |
StringBuilder | append(CharSequence s) | 将指定的字符序列追加到此 |
StringBuilder | append(CharSequence s, int start, int end) | 将指定的 |
StringBuilder | append(Object obj) | 追加 |
StringBuilder | append(String str) | 将指定的字符串追加到此字符序列。 |
StringBuilder | append(StringBuffer sb) | 将指定的 |
StringBuilder | appendCodePoint(int codePoint) | 将 |
int | capacity() | 返回当前容量。 |
char | charAt(int index) | 返回指定索引处的此序列中的 |
IntStream | chars() | 返回 |
int | codePointAt(int index) | 返回指定索引处的字符(Unicode代码点)。 |
int | codePointBefore(int index) | 返回指定索引之前的字符(Unicode代码点)。 |
int | codePointCount(int beginIndex, int endIndex) | 返回此序列的指定文本范围内的Unicode代码点数。 |
IntStream | codePoints() | 返回此序列中的代码点值流。 |
int | compareTo(StringBuilder another) |
|
StringBuilder | delete(int start, int end) | 删除此序列的子字符串中的字符。 |
StringBuilder | deleteCharAt(int index) | 按此顺序删除指定位置的 |
void | ensureCapacity(int minimumCapacity) | 确保容量至少等于指定的最小值。 |
void | getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 将字符从此序列复制到目标字符数组 |
int | indexOf(String str) | 返回指定子字符串第一次出现的字符串中的索引。 |
int | indexOf(String str, int fromIndex) | 从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。 |
StringBuilder | insert(int offset, boolean b) | 将 |
StringBuilder | insert(int offset, char c) | 将 |
StringBuilder | insert(int offset, char[] str) | 将 |
StringBuilder | insert(int index, char[] str, int offset, int len) | 将 |
StringBuilder | insert(int offset, double d) | 将 |
StringBuilder | insert(int offset, float f) | 将 |
StringBuilder | insert(int offset, int i) | 将第二个 |
StringBuilder | insert(int offset, long l) | 将 |
StringBuilder | insert(int dstOffset, CharSequence s) | 将指定的 |
StringBuilder | insert(int dstOffset, CharSequence s, int start, int end) | 将指定的 |
StringBuilder | insert(int offset, Object obj) | 将 |
StringBuilder | insert(int offset, String str) | 将字符串插入此字符序列。 |
int | lastIndexOf(String str) | 返回指定子字符串最后一次出现的字符串中的索引。 |
int | lastIndexOf(String str, int fromIndex) | 返回指定子字符串最后一次出现的字符串中的索引,从指定索引开始向后搜索。 |
int | length() | 返回长度(字符数)。 |
int | offsetByCodePoints(int index, int codePointOffset) | 返回此序列中的索引,该索引从给定的 |
StringBuilder | replace(int start, int end, String str) | 使用指定的 |
StringBuilder | reverse() | 导致此字符序列被序列的反向替换。 |
void | setCharAt(int index, char ch) | 指定索引处的字符设置为 |
void | setLength(int newLength) | 设置字符序列的长度。 |
CharSequence | subSequence(int start, int end) | 返回一个新的字符序列,它是该序列的子序列。 |
String | substring(int start) | 返回一个新的 |
String | substring(int start, int end) | 返回一个新的 |
void | trimToSize() | 尝试减少用于字符序列的存储空间。 |
以上就是我要介绍的内容,希望对小伙伴儿们真正有用!
ps:不定期更新自己学习Java的心得体会。以日记的方式见证自己的成长或者退步哈哈哈!!!
记得点赞转发评论呀!