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. csharp: Oracle Stored Procedure DAL using ODP.NET

    paging : http://www.codeproject.com/Articles/44858/Custom-Paging-GridView-in-ASP-NET-Oracle https:// ...

  2. 如何在windows下的Python开发工具IDLE里安装其他模块?

    以安装Httplib2模块为例 1 下载模块 到 “https://code.google.com/p/httplib2/” 下载一款适合你的压缩包“httplib2-0.4.0.zip” 2 解压下 ...

  3. PHP7新增 功能

    php7发布已有半月,最近有时间了解一下php7的新特性,当然,这个版本最大的特点是性能的提升.在下并非高手,欢迎大家指出错误,同时期待共同交流 1.在use语句增加了group支持use FooLi ...

  4. c#模拟js escape方法

    public static string Escape(string s) { StringBuilder sb = new StringBuilder(); byte[] ba = System.T ...

  5. JQuery实现一个简单的鼠标跟随提示效果

    效果体验:http://hovertree.com/texiao/jsstudy/2/ 实现思路 1 鼠标移入标题(这里是<a>标签) 创建一个div,div的内容为鼠标位置的文本 将创建 ...

  6. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块

    config.xml文件的配置如下: <widget label="地图搜索" icon="assets/images/emergency_resource_ove ...

  7. 免费薪资总额管控系统-JXHR2016

    •工资总额是指按照国家统计局规定的统计口径或企业规定,在一定时期内支付给各类用工的劳动报酬总额 •工资总额,即基本工资,包括岗位工资.各项津补贴 •JXHR2016以薪酬管控为核心,结合人力资源规划. ...

  8. 基础理解2:CSS3按钮动画

    一个Css3按钮效果很好,仔细看了一下发现就是::after,::before然后加上transition,transform等效果实现,主要关注一下几点就能轻松实现: 1.伪类需要position定 ...

  9. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q147-Q151)

    Question  147 Your company has an existing SharePoint 2010 public-facing Web site. The Web site runs ...

  10. iOS之微信支付

    前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容. 正文: 1.首先在开始使用微信支付之前,有一些东西是开发者必须要 ...