首页 > 编程语言 >Java String类的 equals、==和intern()

Java String类的 equals、==和intern()

时间:2023-09-27 11:02:45浏览次数:34  
标签:Java String str2 s1 intern new hello


Java实例的生成

我们都知道,java中new 一个类的实例是在JVM的堆中完成的,如下图所示:

Java String类的 equals、==和intern()_System

在这里我们以String类为例讲解一些更为细节的东西!

String生成实例的代码如下:

String str=new String("hello");

对于通过new产生一个字符串(假设为” hello”)时,会先去上图的常量池中查找是否已经有了” hello”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”hello”对象的拷贝对象。

==和equlas()

我们看以下代码

String str1=new String("hello");
String str2=new String("hello");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
输出结果:
false
true

str1 和str2是引用(引用大家可以理解为指针,他指向"hello"所在内存中的地址),因为new String("hello") 相当于在堆中开辟了新的内存空间,然后在新开辟的内存空间中储"hello",str1 和str2指向的内存地址是不同的,这与他们在内存空间中存储的值是否相等无关!与==对应的是方法equals(),它是对String的值的比较,因为s1和s2的值都是hello,所以他们是相等的!

高级的intern()

接下来我们看一下比较高级的方法intern(),看下面这个例子

Strings1="hello";
Strings3=new String ("hello");
System.out.println(s1==s3);
System.out.println(s1==s3.intern());
输出结果:
false
true

对于第一个结果false很容易理解,因为s1 和s3的引用地址不同!s3调用了intern()方法,相当于把一个运行时创建的字符串加到字符串常量池(如果它还没有入池)。这样一来s1和s3都指向了常量池中的同一个地址,所以它们是相等的!

总结

测试开发在面试中如果你能说出==和equlas()的区别,那么面试官应该就会满意了。如果你还能给面试官讲解intern()的用法,面试官绝对会眼前一亮,大大提升你的入职机会!

标签:Java,String,str2,s1,intern,new,hello
From: https://blog.51cto.com/liwen629/7621683

相关文章

  • 详解如何使用VS code搭建JavaScript环境(适合小白)
    对于从事自动化测试的同学来说,有很多自动化测试项目是需要使用JavaScript脚本语言进行coding的,包括selenium、playwright、Puppeteer,那么选择哪种IDE合适呢?在这里我推荐visualstudiocode,即vscode!注意:本文介绍的是JavaScript在后端运行和调试的方法,并未涉及前端(浏览器)相关开发......
  • 「Java开发指南」在MyEclipse中的Spring开发(三)
    在上文中(点击这里回顾>>),我们介绍了如何管理多个Beans和项目、Spring配置编辑器等,本文将继续介绍AOP、WebFlow支持等,要持续关注哦~MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论6.AOP支持BeansCrossReferences视图显示了所有被建议的beans......
  • Java多线程--Lesson03
    线程同步概念:线程同步指的是在多个线程操作同一资源时,需要通过线程排队和线程锁来约束这些线程,使得其可以对其资源完成同步并发指的是同一时间段内,有多个线程去操作同一个资源文件由于同一进程的多个线程共享一块空间资源,带来方便的同时也带来了冲突问题,为了保证数据在方法中......
  • How to get the original size of an image using JavaScript All In One
    HowtogettheoriginalsizeofanimageusingJavaScriptAllInOne如何使用JavaScript获取一个图片像的原始大小naturalWidth&naturalHeightletoutput=document.querySelector(".output");letimage=document.querySelector("img");window.add......
  • 如何用java代码实现上传文件和下载文件
    如何用java代码实现上传文件:首先创建一个项目创建index.jsp页面如下只要是上传文件就要使用form标签的enctype属性:<!--只要是涉及到上传文件enctype="multipart/form-data"--><formaction="UploadServlet"method="post"enctype="multipart/form-data"> &l......
  • JavaScript-Object 对象的相关方法
    Object.getPrototypeOf() Object.getPrototypeOf方法返回参数对象的原型。这是获取原型对象的标准方法。varF=function(){};varf=newF();Object.getPrototypeOf(f)===F.prototype//true上面代码中,实例对象f的原型是F.prototype。下面是几种特殊对象的原型。//空对......
  • Java内部类
    1.为什么使用内部类?使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响1.1.使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,使用内部类还能够为我们带来如下特性:(1)、内部类可......
  • JavaSE day01【复习回顾面向对象基础、继承、抽象类】测评
    选择题题目1(单选):下列关于Java中类与类之间的关系描述正确的是()选项:​ A.Java中类与类属于多继承,还可以多层继承​ B.Java中类与类属于实现关系,可以单实现也可以多实现​ C.Java中类与类属于实现关系,可以只能单实现​ D.Java中类与类属于单继承,......
  • 第01章:随堂复习与企业真题(Java语言概述)
    第01章:随堂复习与企业真题(Java语言概述)一、随堂复习1.Java基础全程的学习内容第1阶段:Java基本语法>Java概述、关键字、标识符、变量、运算符、流程控制(条件判断、选择结构、循环结构)、IDEA、数组第2阶段:Java面向对象编程>类及类的内部成员>面向对象的三大特征>其它......
  • 尚硅谷_第01章_Java语言概述
    第01章_Java语言概述拓展练习讲师:尚硅谷-宋红康网址:www.atguigu.com1、System.out.println()和System.out.print()有什么区别?System.out.println();//打印完后,会换行。System.out.print();//打印完后,不会换行。2、一个".java"源文件中是否可以包括多个类?有什么限制?......