Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java中String类应该注意的一些地方

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

作者头像
卡尔曼和玻尔兹曼谁曼
发布于 2019-01-25 08:43:07
发布于 2019-01-25 08:43:07
53700
代码可运行
举报
运行总次数:0
代码可运行

    (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类,以提高程序效率。

我们来看一段代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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));
	}
}

运行结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
true
false
true

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013年12月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【蓝桥杯Java_C组·从零开始卷】第一节、环境与变量类型&运算符与类型分析
B站高清回放地址: 【https://www.bilibili.com/video/BV1Bm4y1Q7Wt?spm_id_from=333.999.0.0】 目录 一、Java环境搭建与使用(Ecl
红目香薰
2022/11/29
3060
【蓝桥杯Java_C组·从零开始卷】第一节、环境与变量类型&运算符与类型分析
深入理解Java中的String
想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码:
lyb-geek
2019/01/08
6440
Java中堆(heap)和栈(stack)的区别
  在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
Kevin_Zhang
2019/03/13
2K0
Java中==与equals区别
而我们在实际开发中,自定义类:一般比较对象,都是通过对象的属性值进行比较,所以自定义类,会经常覆在自定义的类中写Object中的此方法,把自己的比较规则写在方法里面。
用户10358987
2024/04/23
700
从认识String类,到走进String类的世界
作为一个常用的数据类型,跟随小编一同进入String的学习吧,领略String的一些用法。
学无止尽5
2024/11/29
2640
从认识String类,到走进String类的世界
Java中equals与==区别
(1)基本数据类型比较值:只要两个变量的值相等,即为true 注意:当基本数据类型使用“==”进行比较时,符号两边的数据必须类型兼容(类型相同或可自动类型转换),否则编译出错;
程序员飞飞
2020/02/27
7340
Java中equals与==区别
Java中String类常见问题汇总
1.字符串常量和字符串对象比较 String str1 = "joshua317"; String str2 = new String("joshua317"); System.out.println(str1 == str2);//false System.out.println(str1.equals(str2));//true /** str1没有使用new关键字,在堆中没有开辟空间,其值"joshua317"在常量池中,str2使用new关键字创建了一个对象,在堆中开辟了空间,"=="比较的是对象
joshua317
2021/12/01
4240
Java中String类常见问题汇总
Java基础语法(九)——String类
  字符串是我们以后工作中非常常用到的类型. 使用起来都非常简单方便, 我们一定要使用熟练。
RAIN7
2021/08/11
6110
Java的String类
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1
鲜于言悠
2024/06/04
1200
Java的String类
java堆、栈、堆栈,常量池的区别,史上最全总结
先说一下栈和堆栈,我们听老一辈的程序员一般都会说堆栈,其实栈就是堆栈的意思,连着叫只是由于历史的原因。博主04年学数据结构的时候,书上都是说的堆栈,FILO(先进后出),也经常拿堆栈和队列,FIFO(先进先出)这两种数据结构拿来作比较。
互扯程序
2019/06/14
5.6K0
String类和常量池内存分析例子以及8种基本类型
       如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则直接返回常量池中该字符串的引用;如果没有, 那么
砖业洋__
2023/05/06
2070
Java基础之String中equals,声明方式,等大总结
    转载请注明出处:http://blog.csdn.net/dmk877/article/details/49420141 
bear_fish
2018/09/20
4250
Java基础之String中equals,声明方式,等大总结
String类(1)
那是因为String这个类有重写toString方法,在println中经过一系列复杂的操作导致其打印出的其实是字符串对象内部的value成员数组中的每个数组成员。如上打印出asdjj。
E绵绵
2024/04/17
1020
String类(1)
String类为什么被设计为不可变的?
String类的值是保存在value数组中的,并且是被private final修饰的
Java识堂
2020/06/30
5670
Java常量池详解,秒懂各种对象相等操作
(2)节省运行时间:比较字符串时,== 比equals()快。对于两个引用变量,只用==判断引用是否相等,也就可以判断实际值是否相等。
Java识堂
2019/08/13
9060
Java常用类(二)String类详解
前言   在我们开发中经常会用到很多的常用的工具类,这里做一个总结。他们有很多的方法都是我们经常要用到的。所以我们一定要把它好好的掌握起来! 一、String简介 1.1、String(字符串常量)概述   在API中是这样描述:     String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。   java.lang.String:
用户1195962
2018/01/18
1.1K0
Java常用类(二)String类详解
Java编程语言中栈与堆内存区别详解
java编程语言把内存分成两种,一种叫做栈内存,一种叫做堆内存。Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
MickyInvQ
2020/09/27
7150
String类和常量池内存分析例子以及8种基本类型[通俗易懂]
该篇例子几乎涵盖了目前所有能解决的类型,以一种通俗的语言讲解出来。当然如果JVM内存基本问题不太会可以看这里:JVM内存的基本问题
全栈程序员站长
2022/09/30
2630
String类教程:如何在Java中使用字符串操作
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
bug菌
2024/07/24
3950
String类教程:如何在Java中使用字符串操作
揭秘字符串的奥秘:探索String类的深层含义与源码解读
https://cloud.tencent.com/developer/article/2465647?shareByChannel=link
忆愿
2024/11/21
1400
揭秘字符串的奥秘:探索String类的深层含义与源码解读
相关推荐
【蓝桥杯Java_C组·从零开始卷】第一节、环境与变量类型&运算符与类型分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验