百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Java常用类String实战(java中string类各个方法的功能)

lipiwang 2025-03-18 23:52 6 浏览 0 评论

首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。

String实际上是使用字符数组来存储的数据的。从源码可以清晰看到定义的字符数组。

String在java/lang包下面,java默认导入lang包,所以使用String类时不用导入。

1.创建方式

(1)String ok1=new String(“ok”);

(2)String ok2=“ok”;

我相信很多人都知道这两种方式定义字符串,但他们之间的差别又有多少人清楚呢。画出这两个字符串的内存示意图:

String ok1=new String(“ok”)。首先会在堆内存申请一块内存存储字符串ok,ok1指向其内存块对象。同时还会检查字符串常量池中是否含有ok字符串,若没有则添加ok到字符串常量池中。所以 new String()可能会创建两个对象.

String ok2=“ok”。 先检查字符串常量池中是否含有ok字符串,如果有则直接指向, 没有则在字符串常量池添加ok字符串并指向它.所以这种方法最多创建一个对象,有可能不创建对象

所以String ok1=new String(“ok”);//创建了两个对象

String ok2=“ok”;//没有创建对象

来两题习题看你是否真的明白了

1.下面代码创建了多少个对象?

Java代码

  1. String temp="apple";

  2. for(int i=0;i<1000;i++)

  3. {

  4. temp=temp+i;

  5. }

答案:1001个

2.下面代码创建了多少个对象?

Java代码

  1. String temp=new String("apple")

  2. for(int i=0;i<1000;i++)

  3. {

  4. temp=temp+i;

  5. }

答案:1002个

2.匹配相等

使用String类经常需要对两个字符串进行对比,看是否相等。这是又有==和equals两种选择,这两者方法区别很大,可能我们会弄错,下面我们对这两种方法进行详解。

首先要明白这两种方法的用途:

比较类中的数值是否相等使用equals(),比较两个包装类的引用是否指向同一个对象时用==

equals()是看数值是否相等,比较好理解。而==是看是否属于同一个对象。下面来举例说明==的使用

先明白这个概念:常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。主要看编译 期字符串能否确定。

情况一:

Java代码

  1. String ok="ok";

  2. String ok1=new String("ok");

  3. System.out.println(ok==ok1);//fasle

明显不是同一个对象,一个指向字符串常量池,一个指向new出来的堆内存块,new的字符串在编译期是无法确定的。所以输出false

情况二:

Java代码

  1. String ok="apple1";

  2. String ok1="apple"+1;

  3. System.out.println(ok==ok1);//true

编译期ok和ok1都是确定的,字符串都为apple1,所以ok和ok1都指向字符串常量池里的字符串apple1。指向同一个对象,所以为true.

情况三:

Java代码

  1. String ok="apple1";

  2. int temp=1;

  3. String ok1="apple"+temp;

  4. System.out.println(ok==ok1);//false

主要看ok和ok1能否在编译期确定,ok是确定的,放进并指向常量池,而ok1含有变量导致不确定,所以不是同一个对象.输出false

情况四:

Java代码

  1. String ok="apple1";

  2. final int temp=1;

  3. String ok1="apple"+temp;

  4. System.out.println(ok==ok1);//true

ok确定,加上final后使得ok1也在编译期能确定,所以输出true

情况五:

Java代码

  1. public static void main(String[] args) {

  2. String ok="apple1";

  3. final int temp=getTemp();

  4. String ok1="apple"+temp;

  5. System.out.println(ok==ok1);//false

  6. }

  7. public static int getTemp()

  8. {

  9. return 1;

  10. }

ok一样是确定的。而ok1不能确定,需要运行代码获得temp,所以不是同一个对象,输出false。

3.Intern()方法

前面已经介绍常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。

但我们可以通过intern()方法扩展常量池。

intern()是扩充常量池的一个方法,当一个String实例str调用intern()方法时,java会检查常量池中是否有相同的字符串,如果有则返回其引用,如果没有则在常量池中增加一个str字符串并返回它的引用。

如:

Java代码

  1. String ok="apple";

  2. String ok1=new String("apple");

  3. System.out.println(ok==ok1);//false

  4. ok1=ok.intern();//获取常量池ok的引用

  5. System.out.println(ok==ok1);//true--指向同一个对象

4.String常用方法

(1)length() 字符串的长度

例:char chars[]={'a','b'.'c'};

String s=new String(chars);

int len=s.length();

(2)charAt() 截取一个字符

例:char ch;

ch="abc".charAt(1); 返回'b'

(3)getBytes()获取对应字节数组

例:String ok="apple";

byte[]bytes=ok.getBytes();

for(int i=0;i<bytes.length;i++)

System.out.println(bytes[i]);//输出字节数组,范围为-128---127

(4)indexOf()和lastIndexOf()

indexOf() 查找字符或者子串第一次出现的地方。

lastIndexOf() 查找字符或者子串是后一次出现的地方。

(5)substring()

它有两种形式,第一种是:String substring(int startIndex)

第二种是:String substring(int startIndex,int endIndex)

(6)concat() 连接两个字符串

(7)replace() 替换

它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:

String replace(char original,char replacement)

例如:String s="Hello".replace('l','w');

第二种形式是用一个字符序列替换另一个字符序列,形式如下:

String replace(CharSequence original,CharSequence replacement)

(8)trim() 去掉起始和结尾的空格

(9)valueOf() 转换为字符串

(10)toLowerCase() 转换为小写

(11)toUpperCase() 转换为大写

(12)startsWith()和endsWith()

startsWith()方法决定是否以特定字符串开始,endWith()方法决定是否以特定字符串结束

更多方法请参考String的API

总结

String类具有immutable(不能改变)性质,当String变量需要经常变换时,会产生很多变量值,应考虑使用StringBuffer提高效率。在开发时,注意String的创建方法。

---更多Java学习资料可关注微信公众号:kaigexuetang_com(长按可复制关注)

相关推荐

超越JSON.parse:JavaScript中高效反序列化的艺术

当我们需要在网络间传输数据或将数据存储到本地存储时,我们通常会将JavaScript对象转换为字符串,然后在需要时再将其转换回对象,这就是数据序列化与反序列化。虽然JSON.parse()和JSON....

如何给别人网页上增加内容通过Chrome扩展为网页添加快速滚动功能

ContentScripts来看开发网站的介绍,ContentScripts是一类在网页上下文中运行的文件。它们可以使用标准的DOM接口,实现读取浏览器访问的网页的详细信息,比如网页的DOM结构...

JavaScript执行栈和执行上下文(js 执行上下文与执行栈)

在JavaScript中,执行栈和执行上下文是理解代码执行流程和作用域链的关键概念。它们决定了代码如何执行以及变量和函数如何被查找和访问。本文将详细介绍执行上下文的生命周期、执行栈的工作原理以及它们在...

防止浏览器缓存特定JS文件的常用方法

防止浏览器缓存特定JavaScript文件的常用方法:1.添加版本号或时间戳在引用JavaScript文件时,在URL中添加一个版本号或时间戳作为查询参数。这样每次更新文件后修改这个参数值,就能让浏...

前端面试:JavaScript 字符串的常用方法?

JavaScript字符串是一种不可变的数据类型,因此在使用字符串时需要注意以下几个方法:charAt(i):返回指定索引位置的字符。concat(str[,start[,end]]):连接...

Sequelize 在 Node.js 中的详细用法与使用笔记

1.Sequelize简介Sequelize是一个基于Promise的Node.jsORM(Object-RelationalMapping)工具,支持PostgreSQL、My...

前端js加密解密常用的六种方法(js加密解密源代码)

一、MD5加密可以使用md5插件进行加密插件地址:github.com/blueimp/JavaScript-MD5计算给定字符串值的(十六进制编码)MD5哈希值:计算给定字符串值和键的(十六进制编...

javascript深拷贝浅拷贝原理分析(js深拷贝和浅拷贝如何实现)

用js处理数据的时候经常遇到这样一个问题,需要保留原始数据不变情况下,进行一系列数据操作,这时候需要制作一份原始数据的副本数据来进行操作注意的是引用数据类型和基本数据类型在内存中存储方式是不一样的,只...

1、从零开始了解和使用WPS的js宏(JSA)

最近使用了一下wps的宏本地客户端功能进行了数据查询,与vba相比感觉还是比较好用的。(所谓本地客户端就是指单机使用运行的wps程序)VBA因为长时间的发展,胜在功能比较强大,支持一些Active...

JavaScript字符串查找方法总结(js查找子串)

在JavaScript中,查找字符串的常用方法有以下几种,根据不同的需求选择合适的方式:1.indexOf()/lastIndexOf()作用:查找子字符串首次出现的位置(indexOf)或...

JavaScript 合并数组的三种方法(js数组合并的几种方法)

数组作为一种数据结构,表示索引项的有序集合。经常会使用到数组,尤其是将多个数组进行合并,比如将数组[1,2,3]和数组[4,5,6]合并,最终得到数组[1,2,3,4,5,6]。数组的合并分不...

JS短文,如何正确理解Splice() 函数与Slice() 函数

转载说明:原创不易,未经授权,谢绝任何形式的转载Splice()函数与Slice()函数都是JavaScript数组中常用的方法之一。虽然它们的名称很相似,但它们的作用却截然不同。在这篇文章...

JavaScript字符串concat()方法教程

一、简介JavaScript中的字符串是一种基本数据类型,它可以用单引号或双引号括起来。concat()方法用于将一个或多个字符串连接起来,并返回连接后的新字符串。concat()方法不会改变原始字符...

手把手教你常用的59个JS类方法(js几种类型)

前言前端开发有时会处理一部分后台返回的数据,或者根据数据判断做一些处理;这个时候就非常有必要将一些常用的工具类封装起来;本文根据常用的一些工具类封装了59个方法,当然还有很多用的较少前期没有录...

js数组常用方法总结(js数组的使用)

首先说明,本文没技术含量,都是js的知识,只是为以后查阅方便。另外我们开了一个免费的讲解web前端课程,有兴趣的朋友可以去看,详情地址:http://fe.qietu.com/forum.php1、创...

取消回复欢迎 发表评论: