与计算机的情话--Java-(17)

69 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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",比较:只关心内容一样即可。

1660563131541.png

方法名:

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天,敬请期待下文,谢谢支持。