1.什么是Java中的字符串

字符串String并不是一种数据类型,而是一个类对象,在java.lang包中,只不过在默认情况下java都是自动导入的,所以可以直接使用
创建一个String对象的方法有两种
1.直接给变量赋值一个字符串,常用的一种方式

String s1 = “immoc”;//字符串用双引号,单引号的是char

2.另一种方式是通过new String()方法

String s2 = new String();//创建一个空字符串对象
String s3 = new String(“Welcome”);

2.字符串的不变性

String对象创建之是不能够修改的,所有的修改在本质上都是创建了一个新的对象而已
先看一个例子:

String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = new String("hello"); System.out.println(s1==s2);//true
System.out.println(s1==s3);//false
System.out.println(s3==s4);//false
s1 = "rocco: "+s1;
System.out.println(s1);//cenyu:hello

解释一下:
1.通过String s1=”hello”;这种方法创建一个s1字符串,此时,局部变量s1是保存在栈中,String是一个引用数据类型,所以s1保存的实际是常量hello所在的内存地址。而hello是存放在堆内存中。
2.s1和s2都是引用类型,且引用的值是相同的,这个值引用已经保存在堆内存中的hello,即两个变量引用的是同一个位置的值,所以用s1==s2可以得出true
3.s3和s4的方式是通过创建一个对象来赋值,此时s3和s4是两个不同的对象,值也就放在不同的对象中,所以这两个也是不想同的。
4.最后当s1 = “rocco: “+s1;并不是再hello的位置上进行修改hello,而是把”hello”+s1的值重新放在一个位置,然后用s1重新引用这个值,原来的hello并不会影响

3.String类的常用方法

常用方法如下:

代码:

 import java.util.Arrays;

 /**
*
* 测试String的方法
*/
public class TestString {
public static void main(String[] args) {
String str = "abcdefaa";
//str.length()返回当前字符串的长度
System.out.println(str.length()); //8
//str,indexOf("bc"),返回b开始的索引
System.out.println(str.indexOf("bc"));//1
//返回在字符串中最后一次出现的索引位置
System.out.println(str.lastIndexOf("a"));//7
//返回从索引位置从3开始到最后的字符串
System.out.println(str.substring(3));//defaa
//返回从索引3开始到5结束的字符串
System.out.println(str.substring(3,5));//de
//清空字符串前后空格,返回
System.out.println(" aa ".trim());//aa
//将字符与指定对象比较,返回false或true
System.out.println(str.equals("aa"));//false
//将字符串转为小写
System.out.println("ABCDEF".toLowerCase());//abcedf
//将字符串转为大写
System.out.println("abcdef".toUpperCase());//ABCDEF
//取字符串指定位置的字符
System.out.println(str.charAt(0));//a
//按照给定的方法分割成数组,后一个参数是第几个结束,第6个下标是5
System.out.println(Arrays.toString(str.split("",6)));//[a, b, c, d, e, faa] }
}

==equals()的区别
==:判断两个字符串在内存中的地址是否相同,即判断是否是同一个字符串对象
equals:比较存储在两个字符串对象中的内同是否一致,即值的是否相等

4.Java中的StringBuilder类

原本String是不可改变的一个对象,所以java提供了两个子类来操作String来操作对象。是StringBuffer和Stringbuilder这两个类。下面我们比较一个这两个类
StringBuffer:提供线程安全,效率低
StringBuilder:不提供线程安全,效率高
这两个类提供的方法一样,所以我们通常是使用效率较高的StringBuilder类
StringBuilder提供的方法:
1.初始化一个字符串对象

StringBuilder str = new StringBuilder()

2.追加方法,追加内容到当前对象的末尾

StringBuilder append(参数)
3.插入方法,将内容插入到对象的指定位置
StringBuilder insert(位置,参数)
4.将StringBuilder转化为String对象
String toString()
5.获取字符串的长度
int length()

 /**
* 测试StringBuiler类方法
*/
public class TestStringBuilder {
public static void main(String[] args) {
//初始化一个空值
StringBuilder str = new StringBuilder();
//初始化一个普通字符串
StringBuilder str1 = new StringBuilder("Hello,");
System.out.println(str1);//Hello,
//追加方法
str1.append("World!");
System.out.println(str1);//Hello,World!
//插入方法
str1.insert(3,"ABC");
System.out.println(str1);//HelABClo,World! String str2 = str1.toString();
}
}

需要注意的是,这里的方法都是在原地址修改,修改之后再引用就是修改之后的值。
改变之后再使用toSting方法转换成String类型

第12章 Java字符串的更多相关文章

  1. 深入理解java虚拟机-第12章Java内存模型与线程

    第12章 Java内存模型与线程 Java内存模型  主内存与工作内存: java内存模型规定了所有的变量都在主内存中,每条线程还有自己的工作内存. 工作内存中保存了该线程使用的主内存副本拷贝,线程对 ...

  2. 《深入理解Java虚拟机》-----第12章 Java内存模型与线程

    概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了.在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速 ...

  3. 第12章 Java内存模型与线程

    参考<深入理解Java虚拟机> 一.Java内存模型 1.Java内存模型 2.内存间交互操作  流程图: 3.volatile关键字 两个特性: 3.1.保证变脸对所有线程的可见性: 由 ...

  4. Gradle 1.12用户指南翻译——第二十三章. Java 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  5. Gradle 1.12用户指南翻译——第46章. Java 库发布插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  6. Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记

    第12章 泛型程序设计 本章内容: * 为什么要使用泛型程序设计 * 定义简单泛型类 * 泛型方法 * 类型变量的限定 * 泛型代码和虚拟机 * 约束与局限性 * 泛型类型的继承规则 * 通配符类型 ...

  7. 设计模式之第12章-享元模式(Java实现)

    设计模式之第12章-享元模式(Java实现) “怎么回事,竟然出现了OutOfMemory的错误.鱼哥,来帮我看看啊.”“有跟踪错误原因么?是内存泄露么?”“不是内存泄露啊,具体原因不知道啊.对了,有 ...

  8. OMG,12 个精致的 Java 字符串操作小技巧,学它

    字符串可以说是 Java 中最具有代表性的类了,似乎没有之一哈,这就好像直播界的李佳琪,脱口秀中的李诞,一等一的大哥地位.不得不承认,最近吐槽大会刷多了,脑子里全是那些段子,写文章都有点不由自主,真的 ...

  9. Java核心技术卷一基础知识-第3章-Java的基本程序设计结构-读书笔记

    第3章 Java的基本程序设计结构 本章内容: 一个简单的Java应用程序 字符串 注释 输入输出 数据类型 控制流 变量 大数值 运算符 数组 本章主要讲述程序设计相关的基本概念(如数据类型.分支以 ...

随机推荐

  1. Zookeeper Api(java)入门与应用(转)

    如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储 ...

  2. mybatis中的#和$的区别(转)

    #相当于对数据 加上 双引号,$相当于直接显示数据 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sq ...

  3. html meta标签使用总结

    meta标签作用 META标签是HTML标记HEAD区的一个关键标签,提供文档字符集.使用语言.作者等基本信息,以及对关键词和网页等级的设定等,最大的作用是能够做搜索引擎优化(SEO). PS:便于搜 ...

  4. 3D banner(CSS3+HTML5)

    1.这是一篇 3Dbanner制作的简易流程,支持高版本的chrome和firefox浏览器,俩浏览器显示可能会有些差异 2.没有兼容性代码,因为仅仅只是熟悉流程,希望小伙伴们自己改善哈(>﹏& ...

  5. 浏览器history对象

    History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能. 注意:从窗口被打开的那一刻开始记录,每个浏览器窗口.每个标签页乃至每个框架,都 ...

  6. ArcGIS Server的Tile的松散型存储(Exploded)

    protected override void GetTileSource(int level, int row, int col, Action<System.Windows.Media.Im ...

  7. SharePoint 2013 Search REST API 使用示例

    前言:在SharePoint2013中,提供Search REST service搜索服务,你可以在自己的客户端搜索方法或者移动应用程序中使用,该服务支持REST web request.你可以使用K ...

  8. Android—Bundle传递ArrayList<T>

    Android开发中Activity传值特别普遍,最贱开发需要传递集合List到另一个Activity,在此作出总结. 首先创建自己的实体类:我的暂命名为Gate. 声明List集合时候泛型中是你声明 ...

  9. PHP魔术常量

    与J2E相比PHP没有九个内置对象,但他有八个魔术变量分别是: '__LINE__' 文件中的当前行号. '__FILE__ 文件的完整路径和文件名. '__DIR__' 文件所在的目录. '__FU ...

  10. C# WinForm修改配置文件

    AppConfigPath 配置文件路径 ,注意 是exe运行的相对路径 private static string AppConfigPath = "WinListen.exe.confi ...