java比较相等符
public class Test1 { /**
* @param args
*/
public static void main(String[] args){
int a = 1000, b = 1000;
System.out.println(a == b); Integer c = 1000, d = 1000;
System.out.println(c==d); Integer e = 100, f = 100;
System.out.println(e == f);
}
} 运行结果: true false true 结果分析: 查看Test1.class文件如下: public class Test1 extends java.lang.Object{
public Test1();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return public static void main(java.lang.String[]);
Code:
0: sipush 1000
3: istore_1
4: sipush 1000
7: istore_2
8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
11: iload_1
12: iload_2
13: if_icmpne 20
16: iconst_1
17: goto 21
20: iconst_0
21: invokevirtual #3; //Method java/io/PrintStream.println:(Z)V
24: sipush 1000
27: invokestatic #4; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
30: astore_3
31: sipush 1000
34: invokestatic #4; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
37: astore 4
39: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
42: aload_3
43: aload 4
45: if_acmpne 52
48: iconst_1
49: goto 53
52: iconst_0
53: invokevirtual #3; //Method java/io/PrintStream.println:(Z)V
56: bipush 100
58: invokestatic #4; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
61: astore 5
63: bipush 100
65: invokestatic #4; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
68: astore 6
70: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
73: aload 5
75: aload 6
77: if_acmpne 84
80: iconst_1
81: goto 85
84: iconst_0
85: invokevirtual #3; //Method java/io/PrintStream.println:(Z)V
88: return
} 由上述字节码我们可以看出 int a = 1000, b = 1000;System.out.println(a == b);执行的是if_icmpne命令,比较的是2个int值是否相等。在此返回为true。 而 Integer c = 1000, d = 1000;System.out.println(c==d);执行的是if_acmpne命令,比较的是对象引用地址。查看jdk源码 public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
} 此时的值为1000,不在-128~127范围内。所以变量c和d是2个不同的对象。因此System.out.println(c==d);返回结果为false。 而 Integer e = 100, f = 100;System.out.println(e == f); 用的是Integer缓存中的同一对象,因此返回结果为true。
今天又是学习了。。。以前没有注意这个问题
转载与:http://blog.csdn.net/jeamking/article/details/6883623
java比较相等符的更多相关文章
- java访问修饰符
了解面向对象思想的同学们,都知道"封装"这一基本特征,如何正确运用访问修饰符,恰恰能体现出封装的好坏. java访问修饰符有四个: 1)public:访问权限最高,其修饰的类.类变 ...
- Java的修饰符
转自:http://blog.csdn.net/manyizilin/article/details/51926230#L42 修饰符: 像其他语言一样,Java可以使用修饰符来修饰类中方法和属性.主 ...
- java基础 (记事本编写hello world,path,classpath,java的注释符)
一:java的基本信息 jre 是指java运行环境,jdk 是指 java 开发工具集(并且里面是自带有jre运行环境的) jvm是指java的虚拟机 java的源代码的后缀名是 .java (例如 ...
- JAVA类型修饰符(public,protected,private,friendly)
JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...
- Java访问修饰符(访问控制符)
Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private bo ...
- Java字符串占位符(commons-text)替换(转载)
Java字符串占位符(commons-text)替换 https://blog.csdn.net/varyall/article/details/83651798 <dependency> ...
- 【java】标示符
java的标示符由数字0-9,字母a-zA-Z,_$组成.(java是严格区分大小写的) 标示符的规则: 1.不能以数字开头 2.不能使用关键字 一般的命名规则: 包名:多个单词组成时,所有字母全部小 ...
- Java类修饰符的使用与作用以及常见问题
首先明确,类是放在文件里的,在文件里面的不同位置就有不同的作用,就是不同类型的类. 1, 顶级类or外部类:包括两种,一个文件中与文件名同名称的类我们称作顶级类(也是外部类),如果在一个文件中的一个类 ...
- C#和JAVA 访问修饰符
JAVA ----------------------------------------------- 访问修饰符 描述 ------------------------------- ...
- 《Java基础知识》Java访问修饰符(访问控制符)
Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private bo ...
随机推荐
- 高德JAVA笔试题
1.常用的RuntimeException. 2.叙述RuntimeException和一般异常的异同. 3.叙述ArrayList.Vector和LinkedList各自的特点和特性. 4.什么是反 ...
- Uber明年在中国将继续补贴,并大举进军100个城市!
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- JAVA并发七(多线程环境中安全使用集合API)
在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对 ...
- JS-string内置对象
1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码. strObj.charCodeAt(index) 说明: index将被处理字符的从零开始计数的编号.有效值为0到字符 ...
- JDBC编程之优化
1.创建 dbconfig.properties driver=com.mysql.jdbc.Driver dburl=jdbc\:mysql\://localhost\:3306/mytest us ...
- Linux常见面试题
一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 索引节点来标 ...
- DFBle.swift
//// DFBle.swift// DFBle//// Created by LeeYaping on 15/9/2.// Copyright (c) 2015年 lisper. All r ...
- openwrt time sycronize
三行命令搞定这个. opkg update opkg install ntpclient ntpclient -s -c 0 -h ntp.sjtu.edu.cn 最后把这个 放到 rc.local ...
- Oracle 11g 完全卸载
停止所有Oracle 11g相关的服务 1.打开"服务"窗口 键入命令:"services.msc",回车,如下图: 2.停止所有Oracle 11g相关的服务 ...
- java基础之导出(Excel)
function exportExcel() { $.messager .confirm( '提示信息', '您确定要导出到Excel?', function(r) { if (r) { var co ...