-
深入了解java中的String-字符串
字符串介绍
1.String特性
- String是标准的不可变类,对它的任何改动,其实就是创建一个新对象,再把引用指向对象
- String对象创建就会在常量池中缓存,如果下次创建会判定常量池是否已经有缓存对象如果有就直接返回引用给创建者
2.字符串创建
字符串创建的方式有两种
- String str= "wangwu";
- String str = new String("wangwu");
3.注意事项
代码如下
String s1 = "laowang";
String s2 = s1;
String s3 = new String(s1);
System.out.println(s1 == s2);//ture
System.out.println(s1 == s3);//false
原因是s3使用new String 时一定会在堆中创建一个内存区域,s2则会直接使用了s1的引用所以才是结果不同
字符串的拼加
1.字符串拼加的几种方式
- String str= "lao"+"wang";
- String str="lao";Str+="Wang";
-
String str = "lao"; String str2 = str + "wang";
2.jvm对字符串的优化
根据前面的知识我们知道,对于String 的任何其实是创建 一个新对象,然后再把引用地址返回对象但是jvm也会String
进行特殊处理以来提供程序运行效率比如以下代码:
String str ="hi,"+"lao" +"wang";
经过jvm优化后的代码是这样的
String str ="hi,laowang";
String str = "hi," + "lao" + "wang";
String str2 = "hi,laowang";
System.out.println(str == str2);//true
3.字符串的方法帮助文档
常用的方法:
concat();把两个字符串拼接起来,获取一个新的字符串
String s1 = "laowang";
String s2 = s1;
String s4= new String(s1);
String s3=s2+s1;
System.out.println(s2.equalsIgnoreCase(s1));\\ture
//比较两个字符串的内容是否相同。 //忽略大小写
System.out.println(s1.charAt(3));//w-->
从0开始数,给定的索引获取对应位置的字符
System.out.println(s1.indexOf("g"));//6-->
获取指定的字符 在字符串中 第一次出现的位置(索引),找不到返回-1
System.out.println(s1.lastIndexOf('a'));//4-->
获取指定的字符 在字符串中 最后一次出现的位置(索引),找不到返回-1
System.out.println(s1.substring(2)); //从给定索引,直接截取到字符串末尾
System.out.println(s1.substring(2,2));//空值
System.out.println(s1.isEmpty());//false 判断是否为空
System.out.println(s1.contains("lao"));//true 判断字符串中是否包含给定的字符串
System.out.println(s1.endsWith("ang"));//true 判断是否是是以该结伟
System.out.println(s1.startsWith("ao"));//false 判断是否是该开关
System.out.println(s1.replace("a", "g"));//前面是被换的值->lgowgng
toLowerCase(); //把字母都转成其对应的小写形式。
toUpperCase(); //把字母都转成其对应的大写形式。
toCharArray() // 把字符串转换为数组
getBytes() // 把字符串转换为字节数组
★trim(); //移除首尾空格。
★split(); //根据给定的内容,切割字符串,返回字符串数组
。。。。后面几个自己试吧
4.字符串格式化
字符串格式化可以让代码更简洁更直观,比如,“我叫老王,今年 30
岁,喜欢读书”在这条信息中:姓名、年龄、兴趣都是要动态改变的,如果使用“+”号拼接的话很容易出错,这个时候字符串格式化方法 String.format()
就派上用场了,代码如下:
String str = string.format("我叫%s,今年%d岁,喜欢%s","老王",30,"读书")
转换符 | 说明
---|---
%s | 字符串类型
%d | 整数类型(十进制)
%c | 字符类型
%b | 布尔类型
%x | 整数类型(十六进制)
%o | 整数类型(八进制)
%f | 浮点类型
%a | 浮点类型(十六进制)
%e | 指数类型
%% | 百分比类型
%n | 换行符
5.字符对比 equals解读
equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。所以重写的方法会取出地址的值然后比较所以引用也相等下面的String源码
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {//判断是否是String的接口或继承
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
小伙伴们一起加油吧!今天就到这里了
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比