Java中String类应该注意的一些地方

本文涉及的产品
DataWorks独享数据集成资源组,8核16GB 1个月
实时数仓Hologres,5000CU*H 20GB 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Java中String类应该注意的一些地方
+关注继续查看


(1)我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,我们创建了String类的对象str。担心陷阱!对象可能并没有被创建!唯一可以肯定的是,指向String类的引用被创建了。至于这个引用到底是否指向了一个新的对象,必须根据上下文来考虑,除非你通过new()方法来显要地创建一个新的对象。因此,更为准确的说法是,我们创建了一个指向String类的对象的引用变量str,这个对象引用变量指向了某个值为"abc"的String类。清醒地认识到这一点对排除程序中难以发现的bug是很有帮助的。

(2)使用String str = "abc";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于Stringstr = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。这个思想应该是享元模式的思想,但JDK的内部在这里实现是否应用了这个模式,不得而知。

(3)当比较包装类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==。

(4)由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。
我们来看一段代码:

package com.tzy.string;

public class StringDemo {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";
        String str3 = new String("abc");
        System.out.println(str1 == str2);
        System.out.println(str1 == str3);
        System.out.println(str1.equals(str3));
    }
}

运行结果如下:

true
false
true

Java 和 C# 中的字符串类型的行为相似,只有细微的差异。两种字符串类型都是不可变的,意味着一旦创建了字符串,字符串的值就无法更改。两个实例中的方法看上去修改了字符串的实际内容,实际上创建并返回了一个新字符串,而原始字符串保持不变。C# 和 Java 中比较字符串值的过程有所不同。若要在 Java 中比较字符串值,则开发人员需要在字符串类型上调用 equals 方法,原因是默认情况下 == 运算符会比较引用类型。在 C# 中,开发人员可以直接使用 == 或 != 运算符来比较字符串值。尽管在 C# 中字符串是引用类型,但在默认情况下 == 和 != 运算符将比较字符串值而不是引用。

目录
相关文章
|
1天前
|
Java
【JAVA】String ,StringBuffer 和 StringBuilder 三者有何联系?
【JAVA】String ,StringBuffer 和 StringBuilder 三者有何联系?
15 0
|
1天前
|
Java C# C++
【JAVA】 String 类简述笔记
【JAVA】 String 类简述笔记
9 0
|
6天前
|
JSON Java 数据格式
Java jackson 由String转成List和各种对象
时间久了,会忘记具体怎么转,记录一下,后面方便使用
19 1
|
1月前
|
JSON Java fastjson
Java String转JSONObject时保持顺序不变
Java String转JSONObject/JSONArray时保持顺序不变
Java String转JSONObject时保持顺序不变
|
1月前
|
存储 安全 Java
Java中的String、StringBuffer和StringBuilder
其实可以看出,java底层实现字符串+的时候其实是用StringBuilder的append()来实现的,如果有字符串的连续+,jvm用StringBuilder append也可以实现优化。
35 0
|
2月前
|
安全 Java API
Java的第十篇文章——常用类下(String、大数类、日期类和包装类)
Java的第十篇文章——常用类下(String、大数类、日期类和包装类)
|
2月前
|
安全 Java API
Java的第八篇文章——Object类、String类和StringBuilder类
Java的第八篇文章——Object类、String类和StringBuilder类
|
2月前
|
存储 算法 Java
Java中String的那些事?
Java中String的那些事?
26 0
|
2月前
|
Java
【Java用法】Java中String类型和int类型互转的所有方法
【Java用法】Java中String类型和int类型互转的所有方法
30 0
|
2月前
|
Java 编译器
相关产品
大数据开发治理平台 DataWorks
检索分析服务 Elasticsearch版
日志服务
推荐文章
更多