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. Context Switch and System Call

    How many Context Switches is “normal”? This depends very much on the type of application you run. If ...

  2. php 禁止 URL 直接访问 php文件

    通过判断访问来源来实现. $fromurl="http://www.111.com/index.php"; //只能从这个地址访问 if( $_SERVER['HTTP_REFER ...

  3. Velocity缓存与穿透(转)

    原文  http://fantaxy025025.iteye.com/blog/2283904 主题 Java 总评:只是标记一下这种用法hack方法.这种场景下用这种方法还是比较雷人的. Veloc ...

  4. UIPinchGestureRecognizer 的scale使用

    使用 UIPinchGestureRecognizer 手势可以放大或缩小UIImageView视图.放大或缩小的值是根据 UIPinchGestureRecognizer 的scale决定.这个值在 ...

  5. client对象层次和0级DOM

    刚開始学了两天JS,闲着无聊,顺手画了张图

  6. Emacs经常使用快捷键的注意事项

    一直用VIM,尝试了好几次Emacs都被它"多得像天上的星星"一样的快捷键给吓倒了.这几天最终下定决心再次尝试. 将它的Tutor练习了一下,顺便对经常使用快捷键做了一下笔记,方便 ...

  7. listary文件查找程序下载和使用

    资源:PHP开发学习门户网站 地址:http://bbs.phpthinking.com/forum.php?mod=viewthread&tid=173 Listary 是一款有用的国产Wi ...

  8. Android4.0设置接口变更摘要(四)

    为了与你之前,你已经设置了共享Tab风格和Item实现圆角.希望能给有须要的朋友一点点帮助,今天再和大家分享一下用ViewPager实现设置分页,小米和OPPO就是这种设置,先来看看效果图: wate ...

  9. 第3周 区_SQL Server中管理空间的基本单位

    原文:第3周 区_SQL Server中管理空间的基本单位 哇哦,SQL Server性能调优培训已经进入第3周了!同时你已经对SQL Server内核运行机制有了很好的认识.今天我会讲下SQL Se ...

  10. Jquery中使用setInterval和setTimeout 容易犯的低级错误

    直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下: 方法1. 应用jQuery的扩展可以解决这个问题. $(document).ready(function(){ $.extend( ...