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读书笔记三(字符串)的更多相关文章

  1. head first java读书笔记

    head first java读书笔记 1. 基本信息 页数:689 阅读起止日期:20170104-20170215 2. 标签 Java入门 3. 价值 8分 4. 主题 使用面向对象的思路介绍J ...

  2. 【转载】MDX Step by Step 读书笔记(三) - Understanding Tuples (理解元组)

    1. 在 Analysis Service 分析服务中,Cube (多维数据集) 是以一个多维数据空间来呈现的.在Cube 中,每一个纬度的属性层次结构都形成了一个轴.沿着这个轴,在属性层次结构上的每 ...

  3. think in java 读书笔记 3 —— 数据报

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 数据报基本知识 2 ...

  4. think in java 读书笔记 2 —— 套接字

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 套接字基本知识 2 ...

  5. think in java 读书笔记 1 ——移位

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 在Think in Java中 ...

  6. Thinking In Java读书笔记--对象导论

    Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...

  7. 深入理解Java虚拟机之读书笔记三 内存分配策略

    一般的内存分配是指堆上的分配,但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配.对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配,少数情况下直接分 ...

  8. Struts2技术内幕 读书笔记三 表示层的困惑

    表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...

  9. java读书笔记二

    这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...

随机推荐

  1. sql server 行列互转

    1 列转行 测试脚本 ),课程 ),分数 int) ) ) ) ) ) ) go 转化脚本 select 姓名 , end) 语文, end) 数学 , end) 物理 from tb group b ...

  2. 设计模式初探3——装饰者模式(Decorator Pattern)

    装饰者模式:动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案. 适用范围: 1. 须要扩展一个类的功能.或给一个类加入附加职责. 2. 须要动态的给一个对象加入功能,这些功 ...

  3. 让浏览器支持 jquery ajax load 前进、后退 功能

    BEGIN; 一般在做 ajax load 的时候,非常多人都不会考虑到须要浏览器支持前进后退功能,由于大部分人都不知道能够实现. 近期遇到这个问题,经过一小段研究,发现github已经有现成的开源工 ...

  4. Kinect的学习笔记发展(一)Kinect引进和应用

    Kinect的学习笔记发展(一)Kinect引进和应用 zouxy09@qq.com http://blog.csdn.net/zouxy09 一.Kinect简单介绍 Kinectfor Xbox ...

  5. NYOJ 47 河问题

    时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描写叙述 在漆黑的夜里,N位旅行者来到了一座狭窄并且没有护栏的桥边.假设不借助手电筒的话,大家是不管怎样也不敢过桥去的.不幸的是 ...

  6. Ctrl+Alt+T 文档大纲

  7. 故障排查:是什么 导致了服务器端口telnet失败?(转)

    telnet命令的主要作用是与目标端口进行TCP连接(即完成TCP三次握手).当服务端启动后,但是telnet其监听的端口,却失败了.或者,当服务端运行了一段时间后,突然其监听的端口telnet不通了 ...

  8. CSDN挑战编程——《金色十月线上编程比赛第二题:解密》

    金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同一时候他也是一个黑客. 考试结束后不久.他吃惊的发现自己的高等数学科目竟然挂了,于是他果断入侵了学校教务部站点. 在入侵的过程中.他发 ...

  9. 牟大哥:《App自我促销》连载2 直立人迁移走

    [谋哥每天一干货,第六十九篇] 前篇说到声音在远古时代.是一个奇妙的东西,它可以非常快地把信息传播到其它地方,突破了短距离. 然而能人的后代直立人学会了直立行走,他们開始走出非洲,到达遥远的中东.中国 ...

  10. NLB+Application Request Route 网路负载均衡

    NLB网路负载均衡管理器详解   序言 在上一篇配置iis负载均衡中我们使用啦微软的ARR,我在那篇文章也中提到了网站的高可用性,但是ARR只能做请求入口的消息分发服务,这样如果我们的消息分发服务器给 ...