String是标准的不可变类,对它的任何改动,其实就是创建一个新对象,再把引用指向对象
String对象创建就会在常量池中缓存,如果下次创建会判定常量池是否已经有缓存对象如果有就直接返回引用给创建者
字符串创建的方式有两种
String str= "wangwu";
String str = new String("wangwu");
代码如下
原因是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
进行特殊处理以来提供程序运行效率比如以下代码:
字符串格式化可以让代码更简洁更直观,比如,“我叫老王,今年 30
岁,喜欢读书”在这条信息中:姓名、年龄、兴趣都是要动态改变的,如果使用“+”号拼接的话很容易出错,这个时候字符串格式化方法 String.format()
就派上用场了,代码如下:
转换符 | 说明
---|---
%s | 字符串类型
%d | 整数类型(十进制)
%c | 字符类型
%b | 布尔类型
%x | 整数类型(十六进制)
%o | 整数类型(八进制)
%f | 浮点类型
%a | 浮点类型(十六进制)
%e | 指数类型
%% | 百分比类型
%n | 换行符
equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。所以重写的方法会取出地址的值然后比较所以引用也相等下面的String源码
小伙伴们一起加油吧!今天就到这里了