(三)java字符串
不可变字符串
Java没有字符串类型,而是提供了一个预定义类String。
java中的字符串是不可变字符串,因此无法更改某一个字符串变量的内容。
优点:编译器可以让字符串共享。当复制一个字符串时,原始字符串和复制的字符串共享相同的字符。
缺点:修改字符串时,需要通过修改字符串变量,让该变量引用另外一个字符串。这会降低运行效率。
总结:程序中很少需要修改字符串,往往是对字符串进行比较。因此共享带来的高效率远远胜过提取、拼接所带来的低效率。
字符串比较
前面提到编译器可以让字符串共享,因此当两个字符串共享同一个字符时,可以使用==比较两个字符串变量。然而使用+或substring处理的字符串并不是共享的,因此必须使用equals方法比较。
举例:
public class main01 {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
//以上s1,s2共享同一个“hello”
String s3 = s2+"";
//s3使用另一个存储空间的“hello”
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s1.equals(s3));
}
}
输出:
true
false
true
构建字符串
有时候需要由多个较短的字符串构建字符串,采用字符串连接的方式每次都要创建新的对象,效率很低。可以使用StringBuilder类解决。(多线程可以使用StringBuffer类)
StringBuilder sb = new StringBuilder();
sb.append("hello ");
sb.append("world");
String s = sb.toString();
注意:StringBuilder和StringBuffer类相似,只不过StringBuffer适合多线程,保证线程安全。StringBuilder适合用在单线程,但速度更快。
(三)java字符串的更多相关文章
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- (转)Java字符串
转自:http://blog.sina.com.cn/s/blog_899678b90101brz0.html 创建字符串有两种方式:两种内存区域(字符串池,堆)1," " 引号创 ...
- java 字符串函数
string1.equals(string2) 比较字符串 substring()它有两种形式,第一种是:String substring(int startIndex)第二种是:String sub ...
- Java字符串进阶
Java字符串进阶 前言 最常用的对字符串操作的类有三个,分别是String,StringBuilder,StringBuffer,下面将会详细的说说这三个类...... String String类 ...
- JAVA字符串操作 (转)
JAVA字符串操作 原帖地址:http://blog.163.com/hn_myj@126/blog/static/50555635200861133942947/ 参考:http://blog.cs ...
- 为什么Java字符串是不可变对象?
转自 http://developer.51cto.com/art/201503/468905.htm 本文主要来介绍一下Java中的不可变对象,以及Java中String类的不可变性,那么为什么Ja ...
- Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较
参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...
- java 字符串池【转】
java 字符串池 java运行环境有一个字符串池.比如String str="abc"时,会首先查看字符串池中是否存在字符串"abc",如果存在则直接将&qu ...
- Java开发知识之Java字符串类
Java开发知识之Java字符串类 一丶简介 任何语言中.字符串都是很重要的.都涉及到字符串的处理. 例如C++中. 字符串使用内存. 并提供相应的函数进行处理 strcmp strcat strcp ...
- java 字符串笔记
java字符串当中有三个关于字符串对象的类. String 首先谈论下他们各自的含义: 1.String含义为引用数据类型,是字符串常量.是不可变的对象,(显然线程安全)在每次对string类型进行改 ...
随机推荐
- 【Flume】数据采集引擎Flume
一.概述 flume是一个高效的.可靠的.可用的分布式海量日志数据收集.聚合.传输的工具. Flume is a distributed, reliable, and available servic ...
- ElasticSearch : APT-GET安装方式
Ubuntu下安装ES 新建非ROOT管理员用户 安装和配置JDK 打开下面的地址 https://www.elastic.co/guide/en/elasticsearch/reference/cu ...
- 泛型List集合转化为DateTable
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; name ...
- Hadoop-Hive学习笔记(1)
1. Hive什么 a.Hive是基于Hadoop的一个数据仓库工具(注意不是数据仓库),将结构化的数据文件映射成一张数据库表. b.Hive是SQL的解析引擎,可以把sql语句转换成MapReduc ...
- 选择排序,C语言实现
选择排序是不稳定排序,时间复杂度为O(n^2). 选择排序类似插入排序,把数组分为两部分,一部分已经排好序,一部分未排序. 刚开始的时候所有的元素都未排序,已排序的部分为空.就好像你手里有十张牌,左手 ...
- NUCLEO-L053R8 TIM定时器 PWM输出
TIM2 PWM输出测试 今天给大伙分享一个TIM2 PWM输出小实验. 实验开发板:Nucleo-L053R8,即STM32L053R8T6. 开发环境:MDK5 图1 - 工程界面 本次实验测试的 ...
- Goland的常用快捷键
文件相关快捷键: CTRL+E,打开最近浏览过的文件. CTRL+SHIFT+E,打开最近更改的文件. CTRL+N,可以快速打开struct结构体. CTRL+SHIFT+N,可以快速打开文件. 代 ...
- Go语言中的运算符
## 1 概述Go语言提供了,算术,关系,逻辑,位,指针,赋值运算符.本篇整体说明一下. ## 2 算术运算 * \+ 相加* \- 相减* \* 相乘* / 相除* % 求余* ++ 自增* \-\ ...
- Java基础之final和abstract关键字
final final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编 ...
- .net core中Primitives.StringValues 处理
参考地址:https://stackoverflow.com/questions/36297329/primitives-stringvalues-how-to-deserialize-value-t ...