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. javascript和css浏览器兼容性总结

    一些浏览器的兼容性做一个总结的问题以下: 为什么会出现这样的现象是?主要表现为Firefox这样的良好支持的浏览器W3C标准,这是现在CSS支持最好的浏览器,和ie它比较早出现,在w3c支持一直没有做 ...

  2. HDU ACM 1071 The area 定积分计算

    分析: 1.求抛物线方程F(x)=a*x^2+b*x+c: 2.求直线方程f(x)=k*x+b. 3.利用定积分计算F(x)-f(x)在x2到x3之间的面积. #include<iostream ...

  3. HDU 1394 Minimum Inversion Number (数据结构-段树)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  4. strcpy_s与strcpy对照

    strcpy_s和strcpy()函数功能几乎相同.strcpy函数.就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它仅仅能假定缓冲足够大来容纳要拷贝的字符串.在程序执行时,这将导致不可 ...

  5. libpomelo 增加编译静态库cocos2d-x xcode 工程

    离 https://github.com/NetEase/libpomelo 下载最新版本.拉开拉链,静态库 ./pomelo_gyp -DTO=ios ./build_ios ./build_ios ...

  6. mysql table is marked as crashed and last (automatic?) repair failed

    1.同事的服务器在mysqldump备份的时候报错了 这个原因是myisam的表数据太多,在某个时刻, 存放数据的这个MyISAM表数据急速长大. 比如一些log表, 当硬盘写满了.这个时候还在继续写 ...

  7. hidden change事件

    原文:hidden change事件 对于隐藏域hidden无法触发onchange的解决方法:在更改此隐藏域的时候,调用下它的onchange方法,使用jquery的话, 就直接加上 $(" ...

  8. [JSP][JSTL]页面调用函数--它${fn:}内置函数、是推断字符串是空的、更换车厢

    页面中调用函数--之${fn:}内置函数 函数描写叙述 fn:contains(string, substring) 假设參数string中包括參数substring,返回true fn:contai ...

  9. Gradle 1.12 翻译——第十六章. 使用文件

    有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...

  10. [ACM] poj 3468 A Simple Problem with Integers(段树,为段更新,懒惰的标志)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 55273   ...