携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情
1、前言
成功没有快车道,幸福没有高速路,一份耕耘一份收获,所有的成功都来自不倦的努力和奔跑,所有的幸福都来自平凡的奋斗。
连续下了一周的雨,今天没下,看了看天气预报说这周又是一周的雨,下不完了?这是把整个夏天的雨都集中在一块下了?
2、正文
今天先给大家说几个面试容易问的问题:
先看第一个例子
public class Text {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "a" + "b" + "c";
System.out.println(s1 == s2);
}
}
大家觉得这个输出结果是true还是false呢?显而易见输出结果是true,因为Java存在编译优化机制,程序在编译时就会把"a" + "b" + "c"给合并在一起转换成"abc"。
大家再看下边这个例子
public class Text2 {
public static void main(String[] args) {
String s2 = new String("abc");
String s1 = "abc";
System.out.println(s1 == s2);
}
}
这个例子输出结果是true还是false呢?这个跟上边那个就有点不一样了,人家也许问你这行代码String s2 = new String("abc");创建了几个对象?这个是创建了两个对象为什么呢?
因为双引号给的"abc"会放到字符串常量池,而New出来的对象会放在堆内存。所以这行代码创建了两个对象。
那 String s1 = "abc";这句代码创建了几个对象,是一个吗?应该是一个也没有,为什么呢?
因为双引号"abc"是不是要到字符串常量池中存放,但是到字符串常量池中发现已经有了,所以是创建了0个对象。所以输出结果是false。
String类常用API
字符串的内容比较:
推荐使用String类提供的"equals",比较:只关心内容一样即可。
方法名:
public int length() 返回此字符串的长度
public char charAt(int index) 获取某个索引位置处的字符
public char[] toCharArray() 将当前字符串转换成字符数组返回
public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后)
public String substring(int beginIndex) 从传入的索引处截取,截取到末尾,得到新的字符串
public String replace(CharSequence target,
CharSequence replacement) 使用新值,将字符串中的旧值替换,得到新的字符串
public String[] split(String regex) 根据传入的规则,切割字符串得到字符串数组返回
这些API只是一些常用的,还有别的。
今天是我参加8月更文挑战的第17天,敬请期待下文,谢谢支持。