【JavaSE】Java(五十一):核心要点总结

简介: 1. String str = “love”; 和 String str = new String("love);一样吗?这两种方式都可以用来创建一个 String 类型的对象,但是有所不同。第一种方式:String str = “love”; 是直接赋值的方式来创建 String 对象。在编译代码时,Java 编译器会为你自动创建一个 String 对象,并将 “love” 这个字符串赋值给它,这种方式也称为字符串字面量(String Literal)。此外,Java 在编译过程中还对相同的字符串进行了常量池优化,使得字符串字面量的复用更加高效。

1. String str = “love”; 和 String str = new String("love);一样吗?


这两种方式都可以用来创建一个 String 类型的对象,但是有所不同。


第一种方式:String str = “love”; 是直接赋值的方式来创建 String 对象。在编译代码时,Java 编译器会为你自动创建一个 String 对象,并将 “love” 这个字符串赋值给它,这种方式也称为字符串字面量(String Literal)。此外,Java 在编译过程中还对相同的字符串进行了常量池优化,使得字符串字面量的复用更加高效。


第二种方式:String str = new String(“love”);则是通过调用 String 类的构造函数来创建一个新的 String 对象,使用这种方式创建的字符串对象总是是一个新的对象,即使其内容与已有的字符串对象相同。


需要注意的是,虽然这两种方式最终都可以创建一个 String 对象,但是它们之间的差异和影响是非常大的。通常情况下,在实际开发中,我们建议尽可能地使用第一种方式,因为它更简单、更有效率、更可读性强,并且字符串字面量被广泛使用,因此将能提高代码的可维护性,并降低出错概率。


这两种方式都可以用来创建字符串对象,但是它们之间存在差异和影响,在实际使用时需要根据具体情况选择最适合的方法。

2. 如何将字符串反转


可以通过 Java 中的字符串转换类 StringBuilder 或 StringBuffer 来将字符串反转。

以下是示例代码:

String str = "Hello World!";
StringBuilder sb = new StringBuilder(str);
StringBuilder reversedStr = sb.reverse();
System.out.println(reversedStr.toString());

或者使用 char 数组来反转字符串,示例代码如下:

SString str = "Hello World!";
char[] c = str.toCharArray();
int left = 0;
int right = c.length - 1;
while (left < right) {
    char temp = c[left];
    c[left] = c[right];
    c[right] = temp;
    left++;
    right--;
}
String reversedStr = new String(c);
System.out.println(reversedStr);

3. String类的常用方法有哪些?


Java中String类 是一个常用的类,它提供了一系列字符串相关的函数和方法。以下是String类的一些常用方法列表:


char charAt(int index):返回指定索引处的字符。

int length():返回此字符串的长度。

String concat(String str):将指定字符串连接到该字符串的末尾。

boolean equals(Object anObject):将此字符串与指定对象进行比较。

boolean isEmpty():当且仅当 length() 为 0 时返回 true。

String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串的一个子字符串。

String replace(char oldChar, char newChar) : 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

String[] split(String regex) : 根据给定正则表达式的匹配拆分此字符串。

boolean startsWith(String prefix) : 测试此字符串是否以指定的前缀开头。

boolean endsWith(String suffix) : 测试此字符串是否以指定的后缀结尾。

int compareTo(String anotherString) : 按字典顺序比较两个字符串。

boolean contains(CharSequence s) : 如果此字符串包含指定的 char 值序列,则返回 true。

String toUpperCase() : 将此字符串转换为大写。

String toLowerCase() : 将此字符串转换为小写。

String trim() : 返回字符串的副本,忽略前导空白和尾部空白。


这些方法并不是全部,但它们是在开发中最常用和最基本的String类方法。熟练掌握这些方法将会极大地提高Java编程效率。

4. new String(“sn”) + new String(“ow”)会创建几个对象?


在这个表达式中,将会创建3个对象

首先,new String(“sn”)将会创建一个新的String对象"sn"。


然后,new String(“ow”)同样会创建一个新的String对象"ow"。


最后,对这两个String对象使用"+“连接符号,得到一个新的字符串"snow”,也就是第三个String对象。


需要注意的是,当使用字符串连接操作符 “+” 连接字符串字面值或字符串对象时,Java编译器会在编译时将其优化为使用StringBuilder 或 StringBuffer 类来实现,以提高效率和避免频繁创建临时的字符串对象。


但是,这种优化只适用于字面值和字符串对象之间的连接,对于其他类型的数据则不起作用。


因此,在上述代码中,仍会创建3个对象。

相关文章
|
4天前
|
存储 Java 测试技术
滚雪球学Java(18):解密JavaSE中的堆栈:你真的了解Java内存吗?
【4月更文挑战第7天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
43 1
滚雪球学Java(18):解密JavaSE中的堆栈:你真的了解Java内存吗?
|
4天前
|
安全 Java 调度
【Java】JavaSE实现多线程
【Java】JavaSE实现多线程
61 1
|
4天前
|
Java C++ 索引
【Java】JavaSE基础知识
【Java】JavaSE基础知识
112 0
|
4天前
|
Java
滚雪球学Java(17):探索循环控制:JavaSE中的break与continue秘技
【4月更文挑战第6天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
35 1
滚雪球学Java(17):探索循环控制:JavaSE中的break与continue秘技
|
4天前
|
Java 程序员 编译器
JavaSE&Java8 Lambda 表达式
JavaSE&Java8 Lambda 表达式
|
4天前
|
存储 Java 程序员
JavaSE&Java的异常
JavaSE&Java的异常
26 0
|
4天前
|
存储 安全 Java
滚雪球学Java(19):JavaSE中的内存管理:你所不知道的秘密
【4月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
40 4
滚雪球学Java(19):JavaSE中的内存管理:你所不知道的秘密
|
4天前
|
存储 Java 测试技术
滚雪球学Java(11):高效编程之道:精通JavaSE顺序结构的关键技巧
【2月更文挑战第23天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
43 2
|
4天前
|
存储 编解码 移动开发
【Java】JavaSE的IO流操作
【Java】JavaSE的IO流操作
59 0
|
4天前
|
Java 大数据
Java大数据面试复习30天冲刺 - 日积月累,每日五题【Day04】——JavaSE
Java大数据面试复习30天冲刺 - 日积月累,每日五题【Day04】——JavaSE
39 0