广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中的==使用方法详解
  • 457
分享到

Java中的==使用方法详解

2024-04-02 19:04:59 457人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录Java中的==2 字符串常量池3 总结Java中的== Java中的==表示的是什么呢?有时候很令人费解。比如,以下例子输出是什么? // 例一 String st

Java中的==

Java中的==表示的是什么呢?有时候很令人费解。比如,以下例子输出是什么?


		// 例一
		String str = "wo";
		String str1 = "wo";
		System.out.println("例一:" + (str == str1));

		// 例二
		String str2 = new String("wo");
		String str3 = new String("wo");
		System.out.println("例二:" + (str2 == str3));

		// 例三
		int i1 = 1;
		int i2 = 1;
		System.out.println("例三:" + (i1 == i2));

		// 例四
		TestObject t1 = new TestObject();
		TestObject t2 = new TestObject();
		System.out.println("例四:" + (t1 == t2));

其中,TestObject是自定义的一个类,结构如下:


package com.yds.test;

public class TestObject {
	public TestObject(){
		
	}
}

最终的结果输出什么呢?结果如下:

例一:true
例二:false
例三:true
例四:false

其实,在Java中,如果是基本数据类型,则 == 比较的是值;如果是对象类型,则 == 比较的是对象的地址。但是,有时候会疑惑,String不是对象类型么?为什么例一是true呢?这个就要谈谈字符串常量池的问题。

2 字符串常量池

String类是我们平常项目中使用频率非常高的一种对象类型,JVM为了提升性能和减少开销,避免字符串的重复创建,维护了一块特殊的内存空间,即字符串常量池。当需要使用字符串时,先去字符串常量池查看该字符串是否已经存在,如果存在,则可直接使用;如果不存在,初始化,并将该字符串放入到字符串常量池中。

jdk1.6及之前版本,字符串常量池在方法区中

在JDK1.7及以后版本,字符串常量池移到了堆中

使用String str=“wo”,可能创建一个或者不创建对象。如果“wo”在字符串常量池中已经存在,则不会再创建String类型的值为“wo”的对象,而是将str指向这个“wo”对象内存地址,后续无论用这种方式创建多少个指向“wo”的引用,在内存中,都只有一个“wo”内存地址被分配。而==判断的是对象内存的地址,所以例一返回true。下图是用这种方式创建字符串的示例图。

例一示例图

对象存放在堆中,字符串常量池是堆中一块特殊区域,new出来的是对象,字符串可以通过直接赋值创建一个对象,如上所述。

对象的引用存放在栈中,String str是对象的引用

在上图中,栈存放的是字符串的引用,str和str1存放的都是对象“wo”的内存地址,==判断对象时,判断的是他们存储的内存地址是否相同,由上图可见,他们的内存地址是相同的,所以例一输出的是true。

图片.png

例二的两个字符串都是通过new的方式创建对象的,所以在堆上有两个String对象,且这两个对象指向字符串常量池中的同一个对象“wo”,如上图所示,此时str2和str3存储的对象地址就不相同,所以例二返回的是false。

String str = new String(“wo”)创建了几个对象?如果字符串常量池中没有“wo”,则该句创建了两个对象,首先会创建一个“wo”存放在字符串常量池中,其本身就是一个对象;然后会new 一个字符串对象,并将“wo”的引用返回给new出来的对象;如果字符串常量池中有“wo”,则该句只创建了一个对象,因为该句首先会查找字符串常量池中是否存在“wo”,如果存在则直接返回"wo"的引用给new出来的对象。

3 总结

==使用总结

如果是基本数据类型,==判断的是值

如果是对象类型,==判断的是对象的地址

通过直接赋值而不是new的方式给String赋值,如果字符串常量池中有该对象,则不会再创建,此时通过 == 判断,返回的是true。如:String str=“wo”;String str1=“wo”;str == str1为true.
在JDK1.6及以前版本,字符串常量池在方法区中;在JDK1.7及以后,字符串常量池在堆中。
对象的引用保存在栈中

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Java中的==使用方法详解

本文链接: https://www.lsjlt.com/news/137030.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中的==使用方法详解
    目录Java中的==2 字符串常量池3 总结Java中的== Java中的==表示的是什么呢?有时候很令人费解。比如,以下例子输出是什么? // 例一 String st...
    99+
    2022-11-12
  • 详解Java中Optional类的使用方法
    目录一、Optional类的来源二、Optional类是什么三、Optional类用法四、代码示例1、创建Optional类2、判断Optional容器中是否包含对象3、获取Opti...
    99+
    2022-11-13
  • 详解Java中Duration类的使用方法
    目录简介Duration和Period创建方法通过时间单位创建通过LocalDateTime或LocalTime通过已有的Duration解析方法用法说明详解比较方法增减方法转换单位...
    99+
    2022-11-13
  • 详解Java中Period类的使用方法
    目录简介Duration和Period创建方法通过时间单位创建通过LocalDate创建解析方法比较方法增减方法转换单位取值方法简介 本文用示例介绍java的Period的用法。 D...
    99+
    2022-11-13
  • Java 构造方法的使用详解
    目录1. 看一个需求2. 基本语法3. 基本介绍4. 快速入门5. 注意事项和使用细节6. 练习1. 看一个需求 看一个需求:前面我们在创建人类的对象时,是先把一个对象创建好后,再给...
    99+
    2022-11-12
  • Java枚举的使用方法详解
     Java枚举的使用方法详解前言  你代码中的flag和status,都应该用枚举来替代很多人都说,枚举在实际开发中很少用到,甚至就没用到。因为,他们的代码往往是这样子的:public class Constant { ...
    99+
    2023-05-31
    java 枚举 ava
  • Java中String类常用方法使用详解
    目录一、length()二、equals三、charAt()四、indexOf()五、trim()六、compareTo()七、toLowerCase()八、toUpper...
    99+
    2022-11-13
    Java String类 常用方法 Java String类 方法 Java String类
  • Java中的vector类使用方法示例详解
     基本操作示例VectorApp.javaimport java.util.Vector; import java.lang.*; import java.util.Enumeration; public class Vector...
    99+
    2023-05-31
    java vector ava
  • 详解java中private关键字的使用方法
    private 关键字中文就是私有关键字,那么到底要怎么使用呢?1、只能在同一类中访问class A { private String msg="Try to access the private variable outside ...
    99+
    2016-08-22
    java入门 java private
  • Java中关键字synchronized的使用方法详解
    synchronized是Java里的一个关键字,起到的一个效果是“监视器锁”~~,它的功能就是保证操作的原子性,同时禁止指令重排序和保证内存的可见性! public clas...
    99+
    2022-11-12
  • Java中对象数组的使用方法详解
    在Java中,对象数组是一种特殊类型的数组,可以存储任意类型的对象。以下是关于Java对象数组的使用方法的详细解释:1. 声明对象数...
    99+
    2023-08-15
    Java
  • Java API文档的使用方法详解
    目录前言1. 概念2. 使用总结前言 学会使用 API 文档是一个开发者基本的素养,而许多初学者并不会在意 API 文档的使用,甚至从来没有接触过,所以写下这篇文章探讨 API 文档...
    99+
    2023-02-01
    java api文档使用方法 java的api文档 java api接口文档
  • Java String之contains方法的使用详解
    目录JavaStringcontains方法小结一下String的contain()函数用法例如Java String contains方法 package api.api; p...
    99+
    2022-11-12
  • Java中Date方法详解
    先进行专栏介绍 本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记 进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。 Date方法 Da...
    99+
    2023-08-16
    java 开发语言
  • 详解Java注解的实现与使用方法
    详解Java注解的实现与使用方法Java注解是java5版本发布的,其作用就是节省配置文件,增强代码可读性。在如今各种框架及开发中非常常见,特此说明一下。如何创建一个注解 每一个自定义的注解都由四个元注解组成,这四个元注解由java本身提供...
    99+
    2023-05-31
    java 注解 ava
  • java中Vector类的常用方法详解
    目录publicvoidadd(intindex, Eelement)publicbooleanaddAll(intindex, Collection<ex...
    99+
    2022-11-13
  • 详解Java中Method的Invoke方法
    在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到Method,这时去调用父类的对象也会报错...
    99+
    2023-05-31
    java method invoke
  • Java中ArrayList的removeAll方法详解
    本文介绍的是关于Java中ArrayList的removeAll方法的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:在开发过程中,遇到一个情况,就是从所有骑手Id中过滤没有标签的骑手Id(直接查询没有标签的骑手不容易实现),L...
    99+
    2023-05-31
    java arraylist removeall
  • 详解JAVA中的构造方法
    目录 一、构造方法的概念 二、构造方法的特性 一、构造方法的概念         构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时由编译器自动调用,并且在整个对象的生命周期内只调用一次。 代码演示:...
    99+
    2023-09-07
    java
  • Java String对象使用方法详解
    Java String对象使用方法详解先来看一个例子,代码如下: public class Test { public static void main(String[] args) { String str = "abc"; ...
    99+
    2023-05-31
    java string ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作