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读书笔记二
这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...
随机推荐
- 《循序渐进Oracle》部分笔记
1.不要用户名/密码 直接/as sysdba 是操作系统认证方式,改变安全方式 sqlnet.ora 里SQLNET.AUTHENTICATION_SERVICES=(NTS)表示启动操作系统认证; ...
- 《JavaScript设计模式与开发实践》读书笔记之模板方法模式
1. 模板方法模式 1.1 面向对象方式实现模板方法模式 以泡茶和泡咖啡为例,可以整理为下面四步 把水煮沸 用沸水冲泡饮料 把饮料倒进杯子 加调料 首先创建一个抽象父类来表示泡一杯饮料 var Bev ...
- WPF换肤之七:异步
原文:WPF换肤之七:异步 在WinForm时代,相信大家都遇到过这种情形,如果在程序设计过程中遇到了耗时的操作,不使用异步会导致程序假死.当然,在WPF中,这种情况也是存在的,所以我们就需要寻找一种 ...
- 官方原版Windows XP SP3(VOL)中文简体版ISO下载
今天,向各位朋友推荐今年五月,由MSDN官方集成的XP With SP3专业VOL版. 文 件:Windows XP Professional with Service Pack 3 (x86) ...
- OCA读书笔记(18) - 使用Support工具
调查和解决问题 问题:数据库中的任一严重的错误定义为一个问题,一般来说,这些错误包括大家熟悉的ORA-600错误和ORA-04031(共享池超出)错误,涉及数据库问题的所有元数据都存储在ADR中,每个 ...
- J2EE的13个规范之JDBC
假设让你接触一样新的东西.你可能感觉无所适从,可是假设本来就是旧事物的话,你学习起来还难吗? 一.ODBC,我们的老朋友 ODBC(Open Database Connectivity)是微软公司与数 ...
- Big Event in HDU(杭电1171)(多重背包)和(母函数)两种解法
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 宏碁宣布Liquid Jade智能机和Leap袖口
据科技网站Android Community 4月29日覆盖,宏碁29公布的新智能机Liquid Jade而随着智能手镯部署Liquid Leap.尽管宏碁已经宣布了一项新的外部基本信息.但价格格和商 ...
- Python3.4 邮件(包含附件与中国)
import smtplib import os from email.mime.text import MIMEText from email.mime.multipart import MIMEM ...
- 辛格尔顿和Android
辛格尔顿(Singleton) .singleton.h,定义类的基本成员及接口 #ifndef SINGLETON_H_INCLUDE #define SINGLETON_H_INCLUDE cla ...