java常用类与包装类--常用类字符串String类、StringBuffer类、Stringbuilder类
1.String类
1.1String类的概念和储存结构:
(1)字符串是一个比较特殊的对象,可以使用new,也可以不使用new来创建字符串对象
String s1 = new String("abc"); 堆
String str = "abc"; 常量池
String str2 = "abc";
两者的区别:一个在堆中,一个在常量池中
常量池:方法区的一部分,字符串在常量池里面保存一份
(2)字符串是不可变量,一旦初始化就不可以被改变
String s1 = "abc";(直接使用用字符串字面量)
s1 = s1 + "123";//s1变量指向变了(指向了"abc123"),并不是字符串变了。

面试题:以下语句创建了几个对象?
String str1 = new String("abc"); 一个或者两个:
如果之前常量池里有"abc"了,就在堆中创建一个对象;
如果常量池里没有"abc"对象,则先在常量池中把"abc"创建出来,然后再到堆空间中创建对象.
面试题
(3)"abc" vs new String("abc");
String s3 = "abc";
String s4 = "abc"; VS String str1 = new String("abc");
使用new关键字创建的对象都是在堆内存中开辟了新空间,所以地址不可能相同。
不使用new创建的字符串引用的是常量池中的字符串对象,所以地址是相同的


(4)new String(chs)

1.2String类的常用构造方法
String(char[] ch)
String(char[] ch,int offset,int count)
String(byte[] bys,int off,int len)
//使用默认的解码,将字节数组解码成String
先在堆中,后在常量池
其构造方法创建的字符串,先在堆中创建出来,
并在常量池保存一个副本(如果常量池中没有的话)

String(String original)
//用一个原始字符串构建一个新字符串
使用构造方法创建的对象都是在堆中
如果直接使用字符串常量创建对象: new String(String original)
先在常量池中创建对象,然后在堆中创建对象;
补充:char的ASCII

int length() --获取字符串中字符的个数
char charAt(int index);
char[] toCharArray();//使用此方法改写统计案例
int indexOf(String str); 有报位置无-1
boolean startsWith(String str);
boolean endsWith(String str);
String[] split(String reg);//统计单词
String substring(int beginIndex);
String substring(int beginIndex,int endIndex);(左闭右开)
1.3 equal方法与==


1.4 String 的构造方法
1.4.1成员变量

1.4.2构造方法







1.5字符串拼接原理

2.StringBuffer类
类似于String的字符缓冲区,是一个容器。其内部维护了一个字符数组,用于存储字符。StringBuffer可以对字符串内容进行增删
很多方法与String相同。
2.1对成员变量源码研究


2.2StringBuffer的构造方法

2.3StringBuffer类特有方法--添加
StringBuffer append(int x) --在末尾追加
StringBuffer insert(int off,插入内容)---指定位置
若:StringBuffer sb = new StringBuffer();
则以下语句等价:




2.3.1append解析
append方法后面可以跟任意数据类型,一下是对append(String str)
2.4StringBuffer类特有方法--删减
StringBuffer delete(int start, int end)
注意位置区间的处理:包前不包后:[start,end)

2.5toString方法



补充:对比oject类


2.5StringBuffer类特有方法--反转功能
StringBuffer reverse()

2.6StringBuffer类特有方法--替换功能
StringBuffer replace(int start,int end,String str)
替换功能:[start,end)

3.StringBuilder类
3.1StringBuilder vs StringBuilder
JDK1.5出现了:StringBuilder
区别是从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。
与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
- StringBuilder是同步的,效率稍低
- StringBuilder是非同步的,因此速度更快

3.2练习
练习1:
将字符串中每个单词反转,例如:
welcome to China
emoclew ot anihC 思路:
考虑使用StringBuffer类的reverse方法
关键是如何将每个单词转换成StingBuffer对象?
public class StringBuilderDemo2 { public static void main(String[] args) {
String src = new String("welcome to China");
//切分成字符串数组
String[] words = src.split(" "); //用来装反转之后的字符串
StringBuilder res = new StringBuilder(); //遍历数组,封装成StringBuilder对象
for(int i = 0;i<words.length;i++){
StringBuilder sb = new StringBuilder(words[i]);
res.append(sb.reverse()).append(" ");
} System.out.println(res.toString().trim());
} }
练习
练习2:

public class StringBufferDemo{
public static void main(String[] args){
StringBuffer s1 = new StringBuffer("A");
StringBuffer s2 = new StringBuffer("B");
test(s1,s2);
System.out.println(s1+","+s2);//考察 AB,B
}
public static void test(StringBuffer x,StringBuffer y){
x.append(y);
y = x;
System.out.println("test:"+x+","+ y);//AB,AB
}
}
练习

java常用类与包装类--常用类字符串String类、StringBuffer类、Stringbuilder类的更多相关文章
- JAVA String、StringBuffer、StringBuilder类解读
JAVA String.StringBuffer.StringBuilder类解读 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作 ...
- String、StringBuffer和StringBuilder类的区别
Java提供了String.StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法. 它们的相同点是都用来封装字符串:都实现了CharSequence接 ...
- 浅谈java中的String、StringBuffer、StringBuilder类的区别以及关系
在java中最常见的使用就是对字符串的操作:首先先说一下对字符串的理解:字符串就是一连串字符序列,Java提供了String和StringBuffer两个类来封装字符串,并提供一系列方法来操作字符串对 ...
- Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- Java笔记——String、StringBuffer和StringBuilder类
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符串序列是不可改变的,直至这个对象被销毁. StringBuffer对象则代表一个字符序列可变的字符串,当一个S ...
- 【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder
[重走Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder 1.String String是Java中的一个final ...
- 总结 String、StringBuffer与StringBuilder类中常用的方法
一.String类的常用方法 1.获取: 1)获取字符串str长度 int i = str.length(); 2)根据位置(index)获取字符 char c = str.charAt(index) ...
- 【JAVA中String、StringBuffer、StringBuilder类的使用】
一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: public class Strin ...
- Java之字符串String,StringBuffer,StringBuilder
String类: String类即字符串类型,并不是Java的基本数据类型,但可以像基本数据类型一样使用,用双引号括起来进行声明.在Java中用String类的构造方法来创建字符串变量. 声明字符串: ...
- 详解 字符串—— String、StringBuffer 与 StringBuilder
本来这篇博文的内容,本人打算在之后的代码中一点一点通过实例讲解的,但是,本人发现,其实这里的知识点还是蛮重要的. 并且,字符串类型,在任何的程序语言中都是被认真对待的,所以,今天专门写一篇博文来介绍一 ...
随机推荐
- 十四:jinja2过滤器之常用的过滤器
1.abs:返回一个数的绝对值(见上一篇)2.default:如果当前变量没有值或字段,则展示默认值(见上一篇) 3.转义过滤器:如果后端出过来的值含html标签,可以控制是否视为html标签执行或者 ...
- gitlab中的CI
https://blog.csdn.net/chengzi_comm/article/details/78778284
- js中的break,continue和return的用法及区别
为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...
- 应用安全 - 平台 | 工具 - Centreon Web - 漏洞 - 汇总
简介 产地 法国 用途 监控 分布 CVE-2019-16405 https://thecybergeek.co.uk/cves/2019/09/19/CVEs.html
- SQL子连接案例
子查询 何时使用子查询 1. 子查询作为数据源 2. 数据加工 需求:根据不同顾客的所有的账户余额划分区间,进行分组 sql语句实现如下: select 'Small Fry' name , 0 lo ...
- etcd api常用操作
如果需要使用v2 version api,启动etcd时候需要加入“ETCD_ENABLE_V2=true”参数,否则会报错“404 page not found” 获取etcd信息 版本信息 # c ...
- [转帖]Ubuntu 18.04 server安装图形界面及realvnc远程桌面连接
Ubuntu 18.04 server安装图形界面及realvnc远程桌面连接 https://blog.csdn.net/networken/article/details/88938304 转帖 ...
- springboot处理单个文件上传
1. 引入pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</gro ...
- Ubuntu16.04.1安装Caffe(GPU)
Caffe的优势: 1.上手快:模型与相应优化均以文本形式而非代码形式给出,caffe给出了模型的定义,最优化设置以及预训练的权重 2.速度快:与CuDNN结合使用,测试AlexNet模型,在K40上 ...
- doT学习(一)之语法
简介 创建搜索最快和简洁的JavaScript模板函数,强调V8和nodejs下的性能,它在nodejs和浏览器上都显示了很好的性能. dot.js速度快,体积小,没有依赖关系,源js代码只有140行 ...
