下面是我看别人博客和java API总结的

首先得明确一个概念就是:

== 的用法  ==比较对象在内存中的地址是否相等。如是是两个基本数据类型变量的比较则比较的是这两个变量值是否相等,但是这里要注意,对于Integer对象来说,其能存储的范围为(-128~127),超过范围则存储到堆内存中。,若是比较两个引用型变量则比较的是对象存储的地址是否相同,即栈中的内容是否相同,(对象存储在堆中,而对象的引用是存储在栈中)(这些必须先明确,否则后面的源码分析就不好理解)

equals的用法    equals比较的是对象之间内容是否相同。

先看java中的Object抽象类对equals()方法的定义:

public boolean equals(Object obj) {

return (this == obj);

}

这是对传入的对象进行== 比较,因为是引用类型,所以比较的是地址。所以在Object类中的equals是比较两个对象的应用地址是否相同(后面我们将要讲到的String类型的equals()方法就不是这样了,因为它重写了equals()方法!)

我们看String类中对equals()方法的定义:

publicboolean equals(Object anObject) {if (this == anObject) { //如果是相同的对象

return true;

}if (anObject instanceof String) { //不是相同对象就比较内容

String anotherString =(String)anObject;int n =count;if (n ==anotherString.count) {char v1[] =value;char v2[] =anotherString.value;int i =offset;int j =anotherString.offset;while (n-- != 0) {if (v1[i++] != v2[j++])return false;

}return true;

}

}return false;

}

所以对String的equals()方法是比较当前字符串与传进来的字符串是否相同

Java常量池

Java的8种基本类型(Byte, Short, Integer, Long, Character, Boolean, Float, Double), 除Float和Double以外, 其它六种都实现了常量池, 但是它们只在大于等于-128并且小于等于127时才使用常量池。

由如下例子可以看出:

importorg.junit.Test;public classJUnitTest {

@Testpublic voidtest1() {

Integer a= 127;

Integer b= 127;

System.out.println("等于127:");

System.out.println(a== b); //true

System.out.println("*****************");

a= 128;

b= 128;

System.out.println("等于128:");

System.out.println(a== b); //false

System.out.println("*****************");

a= -128;

b= -128;

System.out.println("等于-128:");

System.out.println(a== b); //true

System.out.println("*****************");

a= -129;

b= -129;

System.out.println("等于-129:");

System.out.println(a== b); //false

System.out.println("*****************");//测试Boolean

System.out.println("测试Boolean");

Boolean booleanA= false;

Boolean booleanB= false;

System.out.println(booleanA==booleanB); //true

System.out.println("*****************");boolean booleanC = false;boolean booleanD = false;

System.out.println(booleanC==booleanD); //true

System.out.println("*****************");//测试Float

System.out.println("测试Float");float floatA = 1.4f;float floatB = 1.4f;

System.out.println(floatA==floatB); //true

System.out.println("*****************");

Float floatC= 12.3f;

Float floatD= 12.3f;

System.out.println(floatC==floatD); //false

System.out.println("*****************");//测试Float

System.out.println("测试Character");

Character charA= 'A';

Character charB= 'A';

System.out.println(charA==charB); //true

System.out.println("*****************");char charC = 'B';char charD = 'B';

System.out.println(charC==charD); //true

System.out.println("*****************");

}

}

当我们给Integer赋值时,实际上调用了Integer.valueOf(int)方法,查看源码,其实现如下:

public static Integer valueOf(inti) {if(i >= -128 && i <=IntegerCache.high)return IntegerCache.cache[i + 128];else

return newInteger(i);

}

而IntegerCache实现如下:

private static classIntegerCache {static final inthigh;static finalInteger cache[];static{final int low = -128;//high value may be configured by property

int h = 127;if (integerCacheHighPropValue != null) {//Use Long.decode here to avoid invoking methods that//require Integer's autoboxing cache to be initialized

int i =Long.decode(integerCacheHighPropValue).intValue();

i= Math.max(i, 127);//Maximum array size is Integer.MAX_VALUE

h = Math.min(i, Integer.MAX_VALUE - -low);

}

high=h;

cache= new Integer[(high - low) + 1];int j =low;for(int k = 0; k < cache.length; k++)

cache[k]= new Integer(j++);

}privateIntegerCache() {}

}

注意cache数组是静态的。

java中equals合if的用法_java中的equals和==相关推荐

  1. java编程int和byte的用法_Java中的Byte Array和Int转换

    Java中的Byte Array和Int转换 我有这两个函数有一些困难: byteArrayToInt和intToByteArray . 问题是,如果我使用另一个来得到另一个结果,结果是不同的,你可以 ...

  2. java中的equals拿什么鞋的_Java中==和equals方法

    Java程序中测试两个变量是否相等有两种方式:1.== :2.equals()方法 当使用==来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是基本数值类型(不一定要求数据类型严格相同),则 ...

  3. java中的this的用法_java中this的用法

    This,英语单词,发音:[英][ðɪs][美][ðɪs].常翻译为:这,这么.java中this的用法有哪些呢?本文是学习啦小编整理java中this的用法的资料,仅供参考. java中this的用 ...

  4. java中if语句的用法_Java中的if判断语句用法介绍

    在实际生活中经常需要做出一些判断,比如开车来到一个十字路口,这时需要对红绿灯进行判断,如果前面是红灯,就停车等候,如果是绿灯,就通行.Java中有一种特殊的语句叫做选择语句,它也需要对一些条件做出判断 ...

  5. java valueof的用法_Java中String.valueOf()方法的使用

    Java中String.valueOf()方法的使用 (2013-06-21 18:07:34) 标签: it Java中String.valueOf() 方法的使用 1. 由 基本数据型态转换成 S ...

  6. java args用法_Java中args参数数组的用法说明代码

    本篇文章小编给大家分享一下Java中args参数数组的用法说明代码,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. main方法args参数用于接收用户 ...

  7. java collection 用法_Java中Collection接口的用法

    Collection接口是List.Set.Queue接口的父接口 Collection接口定义了可用于操作List.Set和Queue的方法--增删改查 List接口及其实现类--ArrayList ...

  8. java 建造者实际中的用法_java中j建造者模式详解和使用方法

    建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 一个 Builder 类会一步一步构造最 ...

  9. java try的用法_Java中try()catch{}的使用方法

    今天撸代码的时候发现了一段这样的代码 try( Connection conn=DriverManager.getConnection(url,user,pass); Statement stmt=c ...

最新文章

  1. 单网卡部署WEB+Mail+FTP+ISA服务器之四:局域网内部署FTP和winwebmail服务器
  2. CODEVS-1074-食物链-并查集
  3. MHA+LAMP+Keepalived实现高可负载均衡综合实验
  4. By.css 的级联读取
  5. 2020年国家电网计算机类考纲,终于发布!详解2020届国家电网考试大纲,带你读懂考纲变化!...
  6. php rtc,php – webRTC与本地网络
  7. python字符串可以使用+进行计算吗_python用正则对字符串进行运算
  8. arial unicode ms字体_适合海报设计的最佳字体
  9. C#控制 计算机中“服务”的启动与停止 转
  10. Linux、Jvm、MySql性能监控小工具
  11. 怎么禁用计算机usb驱动程序,win7如何禁止USB自动安装驱动程序
  12. python模块化 面向对象,Python学习记录4-面向对象,,OOP思想以模块化思
  13. java unpark_Java多线程学习:(wait,notify)--(await,signal)--(park,unpark)
  14. mysql数据库用sql语句在指定的一个字段后面添加一个字段
  15. 推荐系统入门(七):新闻推荐实践2(附代码)
  16. 怎么把视频做成背景html,HTML5设置视频背景的方法介绍
  17. 踩坑:使用jquery的data()方法获取不到自定义属性的值
  18. 如何利用长尾关键词挖掘推广旅游业
  19. springboot-使用Thymeleaf
  20. 开机显示Error1962:No operating system found.Press any key to repeat boot sequence.

热门文章

  1. 说说海龟交易法则的基本原理,如何实现海龟交易策略?
  2. 安兔兔跑分UX视频兼容性分值为0
  3. 【自然语言处理】【多模态】BLIP:面向统一视觉语言理解和生成的自举语言图像预训练
  4. 【半导体物理】笔记 柴常春 西安电子科技大学 更新ing...
  5. 数据统计与分析基础实验一:基本语法与运算(R语言)
  6. Excel里面方框打勾
  7. 二维平面多点电荷电力线与等位面及三维空间多点电荷电力线的计算机仿真
  8. 树莓派4B开机自启动Python程序,发送WIFI-IP至指定邮箱
  9. 计算机64和32位的区别是什么意思,Windows7 32位和64位的区别是什么?
  10. Unity游戏开发:文字冒险游戏项目实战