`
ncs123
  • 浏览: 99913 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 基本数据类型 ==和equals()比较

    博客分类:
  • J2SE
阅读更多
1.基本类型的存储
  Java 8种基本类型都是存储在堆栈中,例:int i = 1;String str = "hello world";也是存储在堆栈中。
   new基本类型的包装器类型和new String()都是存储在堆内存中。例Integer i = new Integer(1);String str = new String("hello world");

2.==和equels()比较的含义
  1.==是比较对象的内存地址,基本类型就是比较值
  2.java对象的equals()方法都是继承Object.equals(Object o)方法的。比较的内容其实就是使用了“==”比较对象内存地址。
public boolean equals(Object obj) {
        return (this == obj);
    }

  java8种基本类型包装器类和String类都重写了equals()方法,先比较类型在比较值,例如Long.equals(Object obj)
 public boolean equals(Object obj) {
        if (obj instanceof Long) {
            return value == ((Long)obj).longValue();
        }
        return false;
    }


3.实例==和equels()比较
int int3 = 3;
Integer integer3 = new Integer(3);
Integer integer3_2 = new Integer(3);
Integer integer3_3 = 3;
Integer integer3_4 = 3;
Integer integer321 = 321;
Integer integer321_2 = 321;
int int321 = 321;
int int321_2 = 321;
Long long3 = 3l;
System.out.println(integer3==integer3_2);          //false #1
System.out.println(integer3_3==integer3_4);        //true  #2 
System.out.println(integer3==int3);               //true   #3
System.out.println(integer3_3.equals(integer3_4)); //true   #4
		
System.out.println(integer321==integer321_2);      //false #5
System.out.println(int321==int321_2);              //true  #6 
		
System.out.println(long3==int3);                  //true  #7
System.out.println(long3.equals(int3));           //false #8


#1  new两个Integer对象,分配内存在堆中,两个地址块不同
#2 Integer integer3_3 = 3;java编译后的代码为
Integer integer3_3 = Integer.valueOf(3);

查看java Integer.valueOf(int)源码
public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
原来-128<=int<=127的值java栈中有缓存都指向同一个地址,不在这个范围内的int值都是new一个新的Integer,所以#2为true,#5为false
#3 基础类型和包装类运算时,包装类会拆包,所以就是两个值运算
#7 btye,short,int,long运算时,都会向上转型到同一类型运算
#8 equals()比较是先比较类型在比较值,类型不一样所以为false
分享到:
评论

相关推荐

    ==和equals的区别

    java中比较值大小,==和equals的区别,基本数据类型和引用数据类型比较值方法

    ==和equals方法究竟有什么区别

     == 操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。  如果一个变量指向的数据是对象类型的...

    java中==和equals的区别

    == 比较的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址 equals:在Object中模式采用==比较,通常会重写 String对象重写了 equals,比较的是变量值 从上面我们笼统的来说明了一下两者的不同,...

    Java中==与equals的区别

    基本数据类型(也称原始数据类型):byte,short,double,char,int,long,float,boolean.他们之间的比较应该用==,比较的是他们的值是否相等。 引用数据类型:当他们在用==比较的时候,比较的是他们在内存中的存放地址...

    Java中int与integer的区别(基本数据类型与引用数据类型)

     基本数据类型是可以用“==”进行比较,而引用数据类型则不可以,一般是通过equals方法来实现比较。 二 、再说说基本数据类型与引用数据类型的区别? 特点: 1、从概念方面来说  基本数据类型:变量名指向具体的...

    java——让学员少走弯路

    Java的一些基本概念,Java的起源、为什么我们要...Java的常用包,"=="和"equals"的用法,基本数据类型与引用类型,对象的克隆。 数组的复制与排序,Runtime类与Process类,Class类与反射API,Runtime类与单例设计模式。

    Java Object类认识

    Java 对Object类的认识和equals()方法和== 的对比

    Java最全面试题200道

    1.如果引用为基本数据类型,则该引用为常量,该值无法修改; 2.如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。 3.如果引用是类的成员变量,则必须...

    ==和equals() 的比较

    ==和 equals ()都是用于相等型判断的操作符 == 操作符用来判断两个引用是否指的同一个对象,或两个简单类型的值是否相等 即: [ == 比较值类型数据,比较的是值, 而引用类型对象比较的是地址] equals() 方法用来判断...

    Java笔记(9)类型转换与包装类

    文章目录Java笔记(9)类型转换与包装类对象类型转换(Casting)基本数据类型的Casting:对Java对象的强制类型转换称为造型==操作符与equals方法==:equals():String对象的创建代码练习题包装类(Wrapper)基本数据...

    Java 2023最新面试知识点总结.pdf

    谈一谈”=“与”equals0"的区别。 《Think in Java》中说:“关系操作符生成的是一个boolean结果,...综上,对于枚举类型和原始数据类型的相等性比较,应该使用"一";对于引用类型的相等性比较,应该使用equals方法。

    Alibaba Java Coding Guidelines-2.0.0.zip

    对比上一版本V1.0.6,增加了“禁止使用构造方法BigDecimal(double)的方式把double值转化为BigDecimal对象”,“浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用equals来判断”两条规则

    Java数据类型及对应取值范围

    在Java中,数据类型分为两大种:基本数据类型(值类型)和包装类型(引用数据类型)。基本数据类型不是对象,不能调用toString()、hashCode()、getClass()、equals()等方法。  8种基本数据类型—–8种包装...

    学会这些java面试题让你吊打面试官

    学会这些java面试题让你吊打面试官!面试前看看,让你充满自信,不再惧怕面试官各种刁难。1.Java中内存管理及各区域内存储数据的生命周期? 2.JVM堆内存的分代管理以及垃圾回收流程?...10.==和equals的区别?。。。。。。

    Java 2实用教程(第三版)实验指导与习题解答

    上机实践2 基本数据类型与控制语句 6 实验1 输出希腊字母表 6 实验2 回文数 6 实验3 猜数字游戏 8 上机实践3 类与对象 9 实验1 三角形、梯形和圆形的类封装 9 实验2 实例成员与类成员 12 实验3 使用package语句与...

    廖雪峰 Java 教程.doc

    变量和数据类型 整数运算 浮点数运算 布尔运算 字符和字符串 数组类型 流程控制 输入和输出 if判断 switch多重选择 while循环 do while循环 for循环 break和continue 数组操作 遍历数组 数组排序 ...

    超全Java面试题(精简版)持续更新….

    Java8大基本数据类型是什么? byte、short 、int、long、float、double、boolean、char 2、什么是装箱?什么是拆箱? 装箱就是 自动将基本数据类型转换为包装器类型 拆箱就是 自动将包装器类型转换为基本数据类型 3、=...

    Java 最常见的 208 道面试题:第一模块答案

    String 属于基础的数据类型吗? java 中操作字符串都有哪些类?它们之间有什么区别? String str="i"与 String str=new String("i")一样吗? 如何将字符串反转? String 类的常用方法都有那些? 抽象类必须要有抽象...

    Java SE练习代码总结 Java学习资料

    数组属于引用数据类型,元素可以是基本数据类型和引用数据类型,创建数组会在内存中开辟一整块连续的空间,而数组名引用的是这块空间的首地址。 数组长度一旦确定,就不能修改。通过下标(索引)的方式调用指定位置...

    Java面试经典题,对JAVA面试很有帮助

    3.八种基本数据类型的大小,以及他们的封装类 4.标识符的命名规则 5.instanceof 关键字的作用 6.Java自动装箱与拆箱 7.重载和重写的区别 8.equals与==的区别 9.Hashcode的作用 10.String、String StringBuffer 和 ...

Global site tag (gtag.js) - Google Analytics