第12章 Java字符串
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字符串的更多相关文章
- 深入理解java虚拟机-第12章Java内存模型与线程
第12章 Java内存模型与线程 Java内存模型 主内存与工作内存: java内存模型规定了所有的变量都在主内存中,每条线程还有自己的工作内存. 工作内存中保存了该线程使用的主内存副本拷贝,线程对 ...
- 《深入理解Java虚拟机》-----第12章 Java内存模型与线程
概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了.在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速 ...
- 第12章 Java内存模型与线程
参考<深入理解Java虚拟机> 一.Java内存模型 1.Java内存模型 2.内存间交互操作 流程图: 3.volatile关键字 两个特性: 3.1.保证变脸对所有线程的可见性: 由 ...
- Gradle 1.12用户指南翻译——第二十三章. Java 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第46章. Java 库发布插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记
第12章 泛型程序设计 本章内容: * 为什么要使用泛型程序设计 * 定义简单泛型类 * 泛型方法 * 类型变量的限定 * 泛型代码和虚拟机 * 约束与局限性 * 泛型类型的继承规则 * 通配符类型 ...
- 设计模式之第12章-享元模式(Java实现)
设计模式之第12章-享元模式(Java实现) “怎么回事,竟然出现了OutOfMemory的错误.鱼哥,来帮我看看啊.”“有跟踪错误原因么?是内存泄露么?”“不是内存泄露啊,具体原因不知道啊.对了,有 ...
- OMG,12 个精致的 Java 字符串操作小技巧,学它
字符串可以说是 Java 中最具有代表性的类了,似乎没有之一哈,这就好像直播界的李佳琪,脱口秀中的李诞,一等一的大哥地位.不得不承认,最近吐槽大会刷多了,脑子里全是那些段子,写文章都有点不由自主,真的 ...
- Java核心技术卷一基础知识-第3章-Java的基本程序设计结构-读书笔记
第3章 Java的基本程序设计结构 本章内容: 一个简单的Java应用程序 字符串 注释 输入输出 数据类型 控制流 变量 大数值 运算符 数组 本章主要讲述程序设计相关的基本概念(如数据类型.分支以 ...
随机推荐
- Myeclipse 的hadoop环境搭建
https://issues.apache.org/jira/secure/attachment/12460491/hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar ...
- Eclipse中Python开发环境搭建
Eclipse中Python开发环境搭建 目 录 1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...
- bootstrap分页
使用bootstrap分页插件,如下代码是html代码 <title>分页</title> <link href="page/bootstrap-3.3.5-d ...
- Could not publish server configuration for Tomcat v6.0 Server at localhost.
经常在使用tomcat服务器的时候 总会发生一些莫名其妙的错误. 就像下面这个错误: 在配置文件中存在多个/MyWeb的配置,导致不能发布服务. 错误信息: Could not publish ser ...
- springmvc的类型转换
一.springmvc的类型转换 (一)默认情况下,springmvc内置的类型转换器只能 将"yyyy/MM/dd"类型的字符串转换为Date类型的日期 情境一: 而现在我们无 ...
- 【GOF23设计模式】单例模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_单例模式.应用场景.饿汉式.懒汉式 1.GOF23设计模式 2.单例模式 3.饿汉式 1 package com.t ...
- HTML5漂亮实用的电子书
效果体验:http://hovertree.com/texiao/html5/2.htm 点击这里下载 支持多种系统Mac,PC,Android,iPhone,iPad和Windows Phone 支 ...
- Java学习心得之 HttpClient的GET和POST请求
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...
- One-Time Project Recognition
Please indicate the source if you need to repost. After implementing NetSutie for serveral companies ...
- 关于举办 2015年 Autodesk 助力云应用项目开发活动通知
各位尊敬的Autodesk 合作伙伴,大家好! 相信您在过去的一年里应该对Autodesk最新的云服务技术有所了解,您是不是曾经闪现过一些很好的想法,却由于不确定是否真实可行,或担心没有技术支持来帮助 ...