Java读书笔记三(字符串)
1.介绍
本篇博客将对JAVA中的字符串类的基本知识进行介绍。主要字符串类的一些经常用法等内容。
2.字符串对象的创建
1.有两种形式。可是在开发中常常习惯于String 变量名的形式来进行操作。
<span style="font-family:SimSun;font-size:18px;">package com.String; public class Sample13_1 {
public static void main(String args[])
{
//使用简单语法创建字符串对象
String s1=" Java核心技术大全欢迎您!!";
//使用构造器创建字符串对象
String s2=new String("恭喜你分别用两种不同的语法创建了字符串。!");
//创建空字符串对象
String s3="";
//字符串引用s4的值为null
String s4=null;
//打印内容
System.out.println(s1+"#"+s2+"#"+s3+"#"+s4);
}
}
</span>2.String类的一些重要的方法
String作为一个对象的身份出现,肯定少不了一些操作字符串的方法,经常使用的方法汇总例如以下。
<span style="font-family:SimSun;font-size:18px;">package com.String; public class Sample13_3 {
public static void main(String args[]) {
String s1 = "JavaSE6.0核心技术大全欢迎您!!";
String s2 = new String("恭喜你分别用两种不同的语法创建了字符串。!");
String s3;
// 使用charAt方法获取字符串中某个字符
System.out
.println("=====================charAt=======================");
char c = s1.charAt(4);
System.out.println("从0開始数。字符串s1中第4个字符为:" + c);
// 使用toCharArray方法将字符串转换为字符数组
System.out
.println("=====================toCharArray==================");
char[] array = s1.toCharArray();
System.out.print("将char数组倒着打印:");
for (int i = array.length - 1; i >= 0; i--)
System.out.print(array[i]);
// 使用concat方法连接两个字符串
System.out
.println("\n=====================concat=======================");
s3 = s1.concat(s2);
System.out.println("将两个字符串连接后的结果为:" + s3);
// 使用equals方法比較两个字符串的内容
System.out
.println("=====================equals=======================");
s3 = "JavaSE6.0核心技术大全欢迎您!! ";
if (s1.equals(s3))
System.out.println("恭喜你測试成功。s1与s3中的内容是全然同样的!。");
// 使用equalsIgnoreCase方法在不区分大写和小写的情况下比較两个字符串的内容
System.out
.println("=================equalsIgnoreCase=================");
s3 = "JAVASE6.0核心技术大全欢迎您!! ";
if (s1.equalsIgnoreCase(s3))
System.out.println("s1与s3中的内容在不区分大写和小写的情况下是同样的!。");
// 使用length方法获取字符串的长度
System.out
.println("======================length======================");
int size = s1.length();
System.out.println("s1中字符的个数为:" + size);
// 使用replace方法替换字符串中某个字符
System.out
.println("======================replace=====================");
s3 = s1.replace('a', 'X');
System.out.println("将s1中全部的字母a换成字母X:" + s3);
// 使用substring方法获取字符串的某个子串
System.out
.println("======================substring===================");
s3 = s1.substring(10);
System.out.println("从0開始数。s1中第10个字符往后字符串为:" + s3);
s3 = s1.substring(2, 10);
System.out.println("从0開始数,s1中第2个字符到第10个字符的字符串为:" + s3);
// 使用toLowerCase方法将字符串的字符全换成小写
System.out
.println("======================toLowerCase=================");
s3 = s1.toLowerCase();
System.out.println("将s1中的字符全换成小写:" + s3);
// 使用toUpperCase方法将字符串的字符全换成大写
System.out
.println("======================toUpperCase=================");
s3 = s1.toUpperCase();
System.out.println("将s1中的字符全换成大写:" + s3);
// 使用trim方法去掉字符串头部和尾部的不可见字符
System.out
.println("======================trim========================");
s3 = " Java SE6.0 ";
System.out.println("s3没实用过trim方法前:[" + s3 + "]");
s3 = s3.trim();
System.out.println("s3用过trim方法后:[" + s3 + "]");
}
}
</span>3.String对象的内存机制
String对象有“一次投入。终身回报”的优点。以下先来分析一段代码
<span style="font-family:SimSun;font-size:18px;">package com.String; public class Sample13_4 {
public static void main(String args[]) {
// 使用简单语法创建字符串s1与s2
String s1 = "JavaSE6.0";
String s2 = "JavaSE6.0";
// 使用构造器创建字符串s3
String s3 = new String("JavaSE6.0");
// 使用==比較字符串s1与s2
if (s1 == s2) {
System.out.println("字符串s1与字符串s2通过等于測试,结果返回true");
} else {
System.out.println("字符串s1与字符串s2没有通过等于測试。结果返回false");
}
// 使用==比較字符串s1与s3
if (s1 == s3) {
System.out.println("字符串s1与字符串s3通过等于測试。结果返回true");
} else {
System.out.println("字符串s1与字符串s3没有通过等于測试,结果返回false");
}
// 使用equals方法比較字符串s1与s3
if (s1.equals(s3)) {
System.out.println("字符串s1与字符串s3内容同样,结果返回true");
} else {
System.out.println("字符串s1与字符串s3内容不同,结果返回false");
}
}
}
</span>假设同意上述实例的话,会出现意想不到的结果。以下来简单的分析下String的内存机制.
JVM在执行时,将内存分为两个部分,一个是堆;一个是栈;堆中放置的是对象;栈中放置的是对象的引用或局部变量。java在内存设计时。又在堆中开辟了一个非常小的内存,称为字符串常量池,用来存放特定的字符串对象。
当使用String s1=“xxxx”创建时。会首先查看常量池中是否已经包括。假设有的话。直接将引用指向就可以。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHVja3l6aG91c3Rhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
所以执行上述实例的时候。就不会吃惊了。通过这样设计在创建的时候就已经把字符串给比較了。以后比較中仅仅需比較两个引用是否指向的是同一个对象就可以。
须要注意的是採用new创建的字符串对象,会直接在堆上创建出字符串对象,没有此效果。
3.StringBuffer类
上面介绍了String类。可是也有不足之处,假设在用String类进行字符串拼接的话,内存消耗将会非常大,因此为了弥补String的不足,StringBuffer出现了。
通过StringBuffer在拼接字符串时。不会产生中间对象。因此当须要对字符串做大量连接时,应该使用StringBuffer类
StringBuffer类的经常用法例如以下
<span style="font-family:SimSun;font-size:18px;">package com.String; public class Sample13_10 {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer("Java6.0");
System.out.println("操作之前对象sb1的内容为:" + sb1);
// 对sb1进行一系列操作
sb1.append("核心技术大全").insert(4, "SE").delete(9, 15).reverse();
System.out.println("一系列操作之后对象sb1的内容为:" + sb1);
// 创建内容与sb1同样的StringBuffer对象sb2
StringBuffer sb2 = new StringBuffer(sb1.toString());
// 使用StringBuffer的equals方法測试
System.out.println("====使用StringBuffer的equals方法測试对象sb1与sb2的内容====");
if (sb1.equals(sb2)) {
System.out.println("对象sb1与sb2的内容同样!! 。");
} else {
System.out.println("对象sb1与sb2的内容不同样! !! ");
}
// 使用toString方法后使用equals方法測试
System.out.println("====使用toString方法后使用equals方法測试对象sb1与sb2的内容====");
String s1 = sb1.toString();
String s2 = sb2.toString();
if (s1.equals(s2)) {
System.out.println("对象sb1与sb2的内容同样! !");
} else {
System.out.println("对象sb1与sb2的内容不同样! 。");
}
}
}
</span>
4.StringBuilder类
StringBuilder类与StringBuffer类使用方法类似,都能够来做大量字符串的拼接操作。
5.StringBuilder与StringBuffer的差别
1.首先StringBuilder的运行效率要比StringBuffer类高一些。可是StringBuilder类的字符串编辑方法没有进行同步,在多线程时会产生问题。
2.StringBuffer在多线程时,不会产生问题,由于对字符串的编辑进行了同步
Java读书笔记三(字符串)的更多相关文章
- head first java读书笔记
head first java读书笔记 1. 基本信息 页数:689 阅读起止日期:20170104-20170215 2. 标签 Java入门 3. 价值 8分 4. 主题 使用面向对象的思路介绍J ...
- 【转载】MDX Step by Step 读书笔记(三) - Understanding Tuples (理解元组)
1. 在 Analysis Service 分析服务中,Cube (多维数据集) 是以一个多维数据空间来呈现的.在Cube 中,每一个纬度的属性层次结构都形成了一个轴.沿着这个轴,在属性层次结构上的每 ...
- think in java 读书笔记 3 —— 数据报
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 数据报基本知识 2 ...
- think in java 读书笔记 2 —— 套接字
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 套接字基本知识 2 ...
- think in java 读书笔记 1 ——移位
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 在Think in Java中 ...
- Thinking In Java读书笔记--对象导论
Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...
- 深入理解Java虚拟机之读书笔记三 内存分配策略
一般的内存分配是指堆上的分配,但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配.对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配,少数情况下直接分 ...
- Struts2技术内幕 读书笔记三 表示层的困惑
表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...
- java读书笔记二
这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...
随机推荐
- 学习 easyui 之二:jQuery 的 ready 函数和 easyloader 的加载回调函数
Ready 事件不一定 ready 使用 easyloader 的时候,必须要注意到脚本的加载时机问题,easyloader 会异步加载模块,所以,你使用的模块不一定已经加载了.比如下面的代码. &l ...
- 浅谈TCP优化(转)
很多人常常对TCP优化有一种雾里看花的感觉,实际上只要理解了TCP的运行方式就能掀开它的神秘面纱.Ilya Grigorik 在「High Performance Browser Networking ...
- hdu1754(splay)
给n个数,有两种操作 Q a b 询问区间[a,b]的最大值, U a b 将第a个数的值改成b splay树的中序遍历是我们所维护的序列.如果要询问区间[a,b]的最大值,那么只要将第a ...
- python学习笔记之八:迭代器和生成器
一. 迭代器 在前面的笔记中,已经提到过迭代器(和可迭代),这里会对此进行深入讨论.只讨论一个特殊方法---__iter__,这个方法是迭代器规则的基础. 1.1 迭代器规则 迭代的意思是重复做一些事 ...
- PopupMenu消失(Dismiss)抓住
一.在class在implements PopupMenu该监听器类:OnDismissListener, 然后在类需要实现一个方法未实现:onDismiss(PopupMenu menu). 二.参 ...
- uva10791 uva10780(分解质因数)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- hadoop namenode -format Couldn'tload main class "-Djava.library.path=.home.hadoop.hadoop-2.5.2.lib"
<pre name="code" class="sql">[hadoop@MasterHadoop50 ~]$ hadoop namenode -f ...
- Java乔晓松-android中调用系统拍照功能并显示拍照的图片
android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...
- HDU 1051:Wooden Sticks
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- [WPF]静态资源(StaticResource)和动态资源(DynamicResource)
一.文章概述 本演示介绍WPF基本采用静态和动态的资源.而且两者都做一个简单的比较. 静态资源(StaticResource)指的是在程序加载内存时对资源的一次性使用,之后就不再訪问这个资源了:动态资 ...