栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

考研二战失败 我的从零开始Java入门学习(五)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

考研二战失败 我的从零开始Java入门学习(五)

文章目录

一、== 和 euqals

1.==2.euqals3.区别 二、Int和Integer三、Obj类四、基本数据类型字节数


一、== 和 euqals

参考资料:https://blog.csdn.net/qq_36522306/article/details/80550210

1.==

对于基本数据类型来说,== 比较的是值。
对于引用数据类型来说,== 比较的是对象的内存地址。

2.euqals

equals() 不能用于判断基本数据类型的变量,只能用来判断两个对象是否相等。equals()方法存在于Object类中,而Object类是所有类的直接或间接父类,因此所有的类都有equals()方法。

3.区别

是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同 。即会比较堆内存的地址,equals只比较堆里面的内容。
==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
==指引用是否相同, equals()指的是值是否相同
==是运算符,而equal是方法,可以由自己重写。

我们可以举个例子:

import java.util.Scanner;

public class HelloWorld_Test {

    public static void main(String[] args) {
        String s1 = "Start";
        String s2 = "Start";
        String s3 = new String("Start");
        if(s1 == s2) System.out.println("s1==s2");
        if(s1.equals(s2)) System.out.println("s1 equals s2");

        if(s1 == s3) System.out.println("S1 == S3");
        if(s1.equals(s3)) System.out.println("s1 equals s3");
    }

}

结果如下:

可以看到s1 == s2但s1 !== s3,这时有个问题了:只有指向同一个内存空间才能判断成功,为什么s1和s2是两个变量能实现s1 == s2即指向同一个内存空间?

可以看到上述图中的s3和s4存于常量池中。对于基本数据类型(byte,short,char,int,float,double,long,boolean)来说,他们是作为常量在方法区中的常量池里面以HashSet策略存储起来的,对于这样的字符串 “abc” 也是相同的道理,在常量池中,一个常量只会对应一个地址,因此不管是再多的 abc,“abc” 这样的数据都只会存储一个地址,所以所有他们的引用都是指向的同一块地址,因此基本数据类型和String常量是可以直接通过==来直接比较的。而new出来的不在常量池中,单独占堆内存。

但若创建一个Integer a = 128,Integer b = 128,并不能实现a == b

因为Integer型在常量池中的存储范围为[-128,127],127在这范围内,因此是直接存储于常量池的,而128不在这范围内,所以会在堆内存中创建一个新的对象来保存这个值,所以a,b分别指向了两个不同的对象地址,故而导致了不相等。

Tips:Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True or False。

(引用自:https://blog.csdn.net/lcsy000/article/details/82782864)

二、Int和Integer

接上述,Integer和Int有差别吗?

区别(引用自 https://www.cnblogs.com/bigdata-stone/p/10560759.html):

1.Integer是int的包装类,int则是java的一种基本的数据类型;

2.Integer变量必须实例化之后才能使用,而int变量不需要实例化;

3.Integer实际是对象的引用,当new一个Integer时,实际上生成一个指针指向对象,而int则直接存储数值

4.Integer的默认值是null,而int的默认值是0。

Integer变量和int变量进行比较时,只要两个变量的值相等,则结果就为True,(因为包装类Integer和基本数据类型比较的时候,java会自动拆箱为int,然后进行比较,实际上就是两个int变量进行比较),下面运行的结果为true。

三、Obj类

上述说到equals()方法存在于Object类中,那Object类到底是什么还没有完全解释清楚(主要自己也没完全搞懂),故在此记录:

Java Object 类是所有类的父类(所有类的祖先),也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法,位于 java.lang 包中。上述equals若不重写,默认使用的是Obj的equals方法。若当前类不写明继承,则隐式继承Obj类。

public class HelloWorld extends Object{
//显示继承
}

public class Runoob {
//隐式继承
}
四、基本数据类型字节数

学机组的时候已经学过了,以C语言为例再复习一下:

而Java 中有 8 种基本数据类型,分别为:

6 种数字类型:
4 种整数型:byte、short、int、long
2 种浮点型:float、double
1 种字符类型:char
1 种布尔型:boolean。

除char外其他均与上述64位相同(无long long型),而char型 java采用unicode,2个字节(16位)来表示一个字符,故为16位。

对于 boolean,官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1 位,但是实际中会考虑计算机高效存储因素。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749151.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号