String类相关

String类型创建对象

  • 直接使用双引号生命的String常量会存储在常量池(字符串缓冲区)中
  • String对象的intern方法可以拷贝一份字面量放入常量池,最后返回字面量的唯一引用。如果发现常量池中已经存在该字符串,则返回字棉量的唯一引用
  • 直接使用new String()创建出来的String对象会直接存储在堆上
  • 对字符串进行拼接时,分两种情况:
    表达式右边是纯字符串常量,存放在常量池;
    表达式右边存在字符串引用,存放在堆里面;

主要可以看看下面的栗子:

栗子1:

String str1 = "Enon";//在常量区创建对象
String str2 = new String("Enon");//在堆区创建对象
System.out.println(str1 == str2);//因此地址不相同

String str3 = str2.intern();//在常量池中检测到Enon字符串存在,返回str1的引用
System.out.println(str1 == str3);//因此相等

栗子2:

String str1 = new String("Enon");//这一语句同时生成堆中的对象以及常量池中的对象
str1.intern();
String str2 = "Enon";
System.out.println(str1 == str2);//输出false

String str3 = new String("Hello") + new String("World");//此时在常量区没有HelloWorld字符串
str3.intern();//将str3的地址保存在常量区
String str4 = "HelloWorld";//str4指向HelloWorld在常量区的引用,也就是str3
System.out.println(str3 == str4);//输出true,如果没有str3.intern(),将输出false

栗子3(涉及final修饰符):

String str1 = "EnonLay";//在常量池中

String final str2 = "Enon";//final修饰的str2,在编译时已经确定值,属于编译期常量

String str3 = "Enon";//str3指向常量池中

String str4 = str2 + "Lay";//此时str2为编译期确定常量,6为常量池内容,因此常量池中生成EnonLay

String st5 = str3 + "Lay";//str3不是final修饰,需要在运行时确定值,因此str5在堆上生成EnonLay

System.out.println(str1 == str4);//输出true
System.out.println(str1 == str5);//输出false

文章内容大多引用自:
阿飞云的博客

String常用方法

char charAt(int index)返回index位置的char
int compareTo(String anotherString)若anotherString的字典序在前面,就返回一个整数
String concat(String str)将str接到string的后面
int indexOf(int ch)返回ch第一次出现的下标
int indexOf(int ch int fromIndex从fromIndex开始搜索,返回ch第一次出现的下标
int indexOf(String str)返回str第一次出现的下标
int indexOf(String str,int fromIndex)同上
String substring(int beginIndex, int endIndex)返回字字符串
char[] toCharArray()返回一个char数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值