首页 > 编程语言 >【Java】基本数据类型 及 == 与 equals 方法的区别

【Java】基本数据类型 及 == 与 equals 方法的区别

时间:2023-01-07 23:23:28浏览次数:58  
标签:abcd 存储 Java String str1 数据类型 equals

 

(159条消息) java判断基本数据类型_Java 基础:基本数据类型 及 == 与 equals 方法的区别_vivi可爱多的博客-CSDN博客

 

Java中的数据类型在内存的存储原理

(1) 基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,Java语言里面八种数据类型是这种存储模型;

(2) 引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”(存储对象在内存堆上的地址)是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;

基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的

不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。

== 与 equals 方法

判断两个变量是否相等有两种方式:一种是利用 == 运算符,另一种是利用equals方法。

① 比较java基本类型:

比较基本类型只能用"==",不能用"equals",这里的"=="比较的是两个基本类型的值;

"=="比较的是内存地址,"equals"比较的是值.

补充说明:Java String 和 new String()的区别

栈区存引用和基本类型,不能存对象,而堆区存对象。==是比较地址,equals()比较对象内容。

(1) String str1 = "abcd"的实现过程:首先栈区创建str引用,然后在String池(独立于栈和堆而存在,存储不可变量)中寻找其指向的内容为"abcd"的对象,如果String池中没有,则创建一个,然后str指向String池中的对象,如果有,则直接将str1指向"abcd"";如果后来又定义了字符串变量 str2 = "abcd",则直接将str2引用指向String池中已经存在的“abcd”,不再重新创建对象;当str1进行了赋值(str1=“abc”),则str1将不再指向"abcd",而是重新指String池中的"abc",此时如果定义String str3 = "abc",进行str1 == str3操作,返回值为true,因为他们的值一样,地址一样,但是如果内容为"abc"的str1进行了字符串的+连接str1 = str1+"d";此时str1指向的是在堆中新建的内容为"abcd"的对象,即此时进行str1==str2,返回值false,因为地址不一样。

(2) String str3 = new String("abcd")的实现过程:直接在堆中创建对象。如果后来又有String str4 = new String("abcd"),str4不会指向之前的对象,而是重新创建一个对象并指向它,所以如果此时进行str3==str4返回值是false,因为两个对象的地址不一样,如果是str3.equals(str4),返回true,因为内容相同。



标签:abcd,存储,Java,String,str1,数据类型,equals
From: https://www.cnblogs.com/cuipengchong/p/17033845.html

相关文章

  • Java面试题Day04
    1.什么是链表?链表是可以将物理地址上不连续的数据连接起来,通过指针来对物理地址进行操作,实现增删改查等功能.链表大致分为单链表和双向链表单链表:每个节点包含两部......
  • JAVA的数组
    数组的工具类:java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本操作。查看JDK帮......
  • 已完成 10000 多次提交,Solon Java Framework v1.12.1 发布
    一个更现代感的Java应用开发框架:更快、更小、更自由。没有Spring,没有Servlet,没有JavaEE;独立的轻量生态。主框架仅0.1MB。@ControllerpublicclassApp{publ......
  • Java泛型
    泛型学习目标:掌握泛型的基本原理及应用掌握泛型通配符的使用指定泛型操作中的上限及下限在接口上应用泛型掌握泛型方法及泛型数组的使用这里针对的是JDK1.5本身的......
  • 分享2023年最新的15种JavaScript 速记技巧 【终极秘籍】
    强大且广受欢迎的编程语言JavaScript具有庞大的内置函数库,可用于执行各种任务。 本文涵盖了每个开发人员都应该知道的15个JavaScript特性。无论您是新手还是经......
  • JavaScript学习笔记—数组的四个方法
    (1)push()方法可向数组的末尾添加一个或多个元素,并返回新的长度//创建一个数组vararr=["孙悟空","猪八戒","沙和尚"];arr.push("唐僧");arr.push("蜘蛛精","白骨......
  • Java大神常用Linux命令整理二
    19.chmod控制用户对文件的权限,详细说明:https://m.runoob.com/linux/linux-comm-chmod.htmlLinux/Unix的文件调用权限分为三级:文件所有者(Owner)、用户组(Group)、其它......
  • 力扣 35.搜索插入位置 58.最后一个单词的长度(java)
    这是刷题的第2天  第一反应是java有没有提供相应的方法,网上搜了后,用了binarySearch。他这个方法用的也是二分查找,符合题目的时间复杂度,但我一直在想如果数组元素重复......
  • JavaScript学习笔记—使用字面量创建数组
    语法:[]//元素为数字vararr=[1,2,3,6,10];//元素可以是任意数据类型vararr2=["hello",1,true,null,undefined];//也可以是对象varobj={name:"孙悟空......
  • JavaScript学习笔记—数组length属性
    length属性返回数组的长度(数组元素的个数)。语法:数组.length/**连续的数组,可以获取数组长度(元素个数)*非连续的数组,获取数组最大索引+1*/vararr=[1,4,10];arr......