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" >

所以执行上述实例的时候。就不会吃惊了。通过这样设计在创建的时候就已经把字符串给比較了。以后比較中仅仅需比較两个引用是否指向的是同一个对象就可以。

须要注意的是採用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在多线程时,不会产生问题,由于对字符串的编辑进行了同步

时间: 2024-11-05 14:40:50

Java读书笔记三(字符串)的相关文章

think in java 读书笔记

java中没有单独函数的概念,依赖类的方法. java中优化了向前引用,类可以在调用者之后. java中包的命名方法实际上是网址的倒转. c++中因为存在全局变量和函数所以会存在一个变量名冲突的问题,但是java中不存在全局变量,不同程序设计者通过不同的类将相同名字的变量和方法隔离. static关键字 通常,我们创建类时会指出那个类的对象的外观与行为.除非用new 创建那个类的一个对象,否则实际上并 未得到任何东西.只有执行了new 后,才会正式生成数据存储空间,并可使用相应的方法. 但在两种

Effective Java读书笔记(3对于所有对象都通用的方法)

3.1 覆盖equals时请遵守通用约定 什么时候应该覆盖Object.equals()方法呢? 如果类具有自己特有的"逻辑相等"概念(不同于对象等同的概念),而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法. Object.equals()方法具有自反性.对称性.传递性.一致性和与null比较返回false的特点. 实现高质量equals方法的诀窍: (1)使用==操作符检查"参数是否为这个对象的引用".如果是,则返回true,这

【java读书笔记】——java开篇宏观把控 + HelloWorld

学完java有一段时间了,一直没有做相应的总结,总觉得有一种缺憾.从这篇博客开始,将自己平时的学习笔记进行总结归纳,分享给大家. 这篇博客主要简单的介绍一下java的基础知识,主要的目的是扫盲.原来只是听说过java,现在自己真正开始学习了,看完了第一集视频之后,问自己,你知道java是什么吗?问完之后才发现一无所知,上完查一查,简单了解一下,给自己扫盲. 介绍 知道java是一种可跨平台应用软件的面向对象的程序设计语言,就可以了. 组成 Java由四方面组成:java编程语言,java类文件格

【java读书笔记】JSTL,快速精通

JSTL并不是什么新颖的技术而且很简单,甚至有人认为JSTL已经过时了.但是我认为它既然存在,就有存在的道理,作为技术人员就应该知道它们是什么,怎么使用,有什么优点. JSTL包含两部分:标签库和EL语言.下面先介绍标签库,再介绍EL语言,最后总结一下JSTL的优点. JSTL JSTL简介 JSTL(JavaServer Page Standard Tag Library,即:JSP标准标签库),是由SUN公司提供的简化JSP页面设计的标签.JSTL是由Core(核心库).Format(格式化

《你必须知道的.NET》读书笔记三:体验OO之美

一.依赖也是哲学 (1)本质诠释:"不要调用我们,我们会调用你" (2)依赖和耦合: ①无依赖,无耦合: ②单向依赖,耦合度不高: ③双向依赖,耦合度较高: (3)设计的目标:高内聚,低耦合. ①低耦合:实现最简单的依赖关系,尽可能地减少类与类.模块与模块.层次与层次.系统与系统之间的联系: ②高内聚:一方面代表了职责的统一管理,一方面又代表了关系的有效隔离: (4)控制反转(IoC):代码的控制器交由系统控制而不是在代码内部,消除组件或模块间的直接依赖: (5)依赖注入(DI): ①

Effective Java 读书笔记(2创建和销毁对象)

第一章是引言,所以这里不做笔记,总结一下书中第一章的主要内容是向我们解释了这本书所做的事情:指导Java程序员如何编写出清晰.正确.可用.健壮.灵活和可维护的程序. 2.1考虑用静态工厂方法代替构造器 静态工厂方法与构造器相比有四大优势: (1)静态工厂方法有名称,具有适当名称的静态工厂方法易于使用.易于阅读: (2)不必每次在调用它们的时候都创建一个新的对象: (3)可以返回原返回类型的任何子类型的对象: (4)在创建参数化类型实例的时候,它们使代码变得更加简洁. 同时静态工厂方法也有两大缺点

Effective Java读书笔记(4 类和接口)

4.1 使类和成员的可访问性最小化 要区别设计良好的模块和设计不好的模块,最重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏其内部数据和其他实现细节.设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰的隔离开来,然后模块之间只通过API进行通信,一个模块不需要知道其他模块内部的工作情况,这个概念被称为信息隐藏或封装,是软件设计的基本原则之一. 4.2 在公有类中使用访问方法而非公有域 坚持面向对象程序设计思想:如果类可以在它所在的包的外部进行访问,就提供访问方法,以保留将来改

《世界是数字的》读书笔记 三

<世界是数字的>读书笔记 三 第六章 软件系统 操作系统是软件中的基础层,他负责管理计算机硬件,并为其他被称作应用程序的程序运行提供支持. 6.1操作系统 操作系统控制和分配计算机资源.首先,他负责管理CPU,调度和协调当前运行的程序.操作系统通常都需要管理数十个同时运行的进程或任务. 其次,操作系统管理RAM.他把程序加载到内存中以便执行指令. 最后,操作系统管理和协调外接设备的活动. 6.2操作系统怎么工作 计算机启动时首先要加载代码,加载的过程中还要检查硬件,比如哪些设备已经接入电脑,,

【java读书笔记】——java的异常处理

程序在实际环境的运行过程中,安全成为需要首先考虑的重要因素之一,这也是用户和程序员最关心的问题.同时,Java语言健壮性也体现在了能够及时有效地处理程序中的错误,准确的说是Java的异常处理机制为解决安全问题提交了一份满意的答卷. 先从整体上看一下本文要介绍的内容,然后进行详细的分析: 1.异常的概念 异常又称为例外,是特殊的运行错误对象,对应着Java语言特定的运行错误处理机制. 上面的概念是书本上说的,下面我谈一下自己的看法 其实异常处理机制提供了统一的机制来识别和响应程序错误,异常可以为我