Java语言之Integer类
Java之Integer类
Integer类简介:
Integer类是基本数据类型int的包装器类,是抽象类Number的子类,位于java.lang包中。
Integer类在对象中包装了一个基本类型int的值,也就是每个Integer对象包含一个int类型的字段。在Integer源码中如下定义:
private final int value;
字段:
- [static int] MAX_VALUE:值为 231-1 的常量,它表示 int 类型能够表示的最大值。
- [static int] MIN_VALUE:值为 -231 的常量,它表示 int 类型能够表示的最小值。
- [static int] SIZE: 用来以二进制补码形式表示 int 值的比特位数。
- [static Class] TYPE:表示基本类型 int 的 Class 实例。
- [static int] BYTES:返回int值所占的字节数。
构造方法
Integer类提供了两种构造方法:它们都会返回一个Integer对象
(1)Integer(int value);
(2)Integer(String s); //要注意的是字符串不能包含非数字字符,否则会抛出NumberFormatException
(3)除此之外,还可以给Integer对象直接赋值,如:Integer a = 10;
一些重要的方法
返回值 | 方法名 | 方法的描述 |
---|---|---|
[static int] | bitCount(int i) | 返回指定 int 值的二进制补码表示形式的 1 位的数量 |
[static int] | compare(int x,int y) | 比较x和y的值,当x大于y时返回1,当x等于y时返回0,否则返回-1 |
[int] | compareTo(Integer anotherInteger) | 在数值上比较两个Integer对象 |
[boolean] | equals(Object obj) | 比较此对象与指定对象 |
[int] | hashcode() | 返回此对象的哈希码 |
[static int] | parseInt(String str) | 将字符串参数作为有符号十进制数进行解析 |
[static String] | toBinaryString(int i) | 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式 |
[String] | toString() | 返回该Integer值得String对象 |
[static Integer] | valueOf(int i) | 返回一个表示指定的 int 值的 Integer 实例 |
特别注意:
(1)“==”和equals()方法:在Integer类中,“==”用来比较对象地址是否相同,并且Integer类重写了equals(Object obj)方法,在equals(Object obj)方法中,会先判断参数中的对象obj是否是Integer类型的对象,如果是则判断值是否相同,值相同则返回true,值不同则返回false,如果obj不是Integer类的对象,则返回false。
需要注意的是:当参数是基本类型int时,编译器会给int自动装箱成Integer类,然后再进行比较。
public static void main(String[] args) {int t1 = 128;int t2 = 128;Integer t3 = 127;Integer t4 = 127;Integer t5 = 100;int t6=100;System.out.println(t5.equals(t6)); //trueString s1 = "123";String s2 = "123";String s3 = new String("123");String s4 = new String("123");System.out.println(t1 == t2); //trueSystem.out.println(t3 == t4); //falseSystem.out.println(t3.equals(4)); //falseSystem.out.println(s1 == s2); //trueSystem.out.println(s1.equals(s2)); //trueSystem.out.println(s3 == s4); //falseSystem.out.println(s3.equals(s4)); //true}
//Integer类中的equals(Object obj)源代码public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;}
//int和Integer对象用构造方法、直接赋值方法赋值比较
int a = 200;
Integer b = new Integer(200);
Integer c = 200;//b和c都是Integer对象,所以用“==”比较时,就是比较内存地址值是否相等
System.out.println(b == c); //false
System.out.println(b.equals(c)); //true//a在进行比较时,会自动装箱
System.out.println(b.equals(a)); //true//因为b是Integer对象,a是基本数据类型int的变量,当进行“==”比较时,b会自动拆箱成int,从而比较的就是变量的值是否相等System.out.println(b == a); //true
(2)Integer直接赋值和valueOf()方法,下面来看下面两段代码的不同:
Integer i02 = 59;
Integer i03 = Integer.valueOf(59);
Integer i04 = new Integer(59);System.out.println(i02 == i03); //true
System.out.println(i02 == i04); //false
System.out.println(i03 == i04); //false
Integer i02 = 200;
Integer i03 = Integer.valueOf(200);
Integer i04 = new Integer(200);System.out.println(i02 == i03); //false
System.out.println(i02 == i04); //false
System.out.println(i03 == i04); //false
我们可以看到上面两段代码只是赋给对象的值不同,但是在判断”i02 == i03“时得到的结果却不同,这是为何:当使用直接赋值如”Integer i01 = 59“的时候,会调用Integer的valueOf()方法,这个方法就是返回一个Integer对象,但是在返回前,作了一个判断,判断要赋给对象的值i是否在[-128,127]区间中,且IntegerCache(是Integer类的内部类,里面有一个Integer对象数组,用于存放已经存在的且范围在[-128,127]中的对象)中是否存在此对象,如果存在,则直接返回引用,否则,创建一个新对象返回。那么我们就可以知道,200这个数字不在[-128,127]中,所以会直接创建一个新对象返回,i02和i03就是两个不同的对象。而59属于[-128,127]中,当创建i03时,会直接返回引用,此时i02和i03都指向同一个地址。
以第一段代码为例:”Integer i02 = 59":因为程序初次运行,没有59,所以直接创建一个对象返回;“Integer i03 = Integer.valueOf(59)”:因为IntegerCache中已经存在59,所以直接返回引用;“Integer i04 = new Integer(59)”:直接创建一个新对象。
JVM中一个字节一下的整型数据(即[128,127])会在JVM启动时加载进内存,除非用new Integer()显示的创建对象,否则都是同一对象。
//Integer类中的valueOf()源代码 public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}
参考文献
https://www.cnblogs.com/zwxblog/p/7788573.html
Java语言之Integer类相关推荐
- java对象与类ppt,JAVA语言对象与类.ppt
JAVA语言对象与类.ppt 第三章 对象与类,3.1 类与对象 3.2 定义类 3.3 成员变量的作用域 3.4 方法重载 3.5 创建对象 3.6 构造方法 3.7 this关键字 3.8 初始化 ...
- java类描述_java笔记2:Java语言中的类和对象的描述
在Java 语言中,除8 个基本数据类型值之外, 一切都是对象,而对象就是面向对象程序设计的中心. 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还 ...
- jdbc是java语言编写的类和接口_JDBC——Java语言连接数据库的标准
JDBC概述 API JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...
- Java快速入门学习笔记7 | Java语言中的类与对象
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- java语言特点解释类_Java语言特点
Java语言特点 引导语:Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言.那么你知道Java语言的特点吗,以下是百分网小编分享给大家的Java语言特点,欢迎阅读! Java语言的特点 1 ...
- java integer_Java之Integer类
Integer类简介: Integer类是基本数据类型int的包装器类,是抽象类Number的子类,位于java.lang包中. Integer类在对象中包装了一个基本类型int的值,也就是每个Int ...
- java anotherstring_徐葳【2019版最新】40小时掌握Java语言之06String类
第1章:String类详解 1.1 String概述 从今天开始我们学习一些java中已有对象的使用, 首先学习一个比较常用的对象,String(字符串)对象 字符串对象不用new就可以直接使用 如图 ...
- Java中的Integer类
常见对象(Integer类的概述和构造方法) 如果有两个需求: 需求: 将100转换成二进制, 八进制, 十六进制 判断一个数是否在int的范围内 当然,可以使用最基本的方法累除取余来求一个十进制数的 ...
- java中intvalue_Java Integer类intValue()方法的示例
java中intvalue 整数类intValue()方法 (Integer class intValue() method) intValue() method is available in ja ...
- 学习-Java包装类之Integer类(1)
任务描述 本关任务:掌握 Integer 类的定义与方法的使用. 相关知识 Java 是个面向对象语言,所有的操作都是基于对象.Object 类是 Java 中的对象基础,所有 Java 中的类都有个 ...
最新文章
- 海蜘蛛如何手工升级到最新版
- 大整数乘法(POJ2389)
- UI设计入门书籍(未整理)
- log4j无法显示mybatis sql
- Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp
- python 将一个字符list的列表扁平化成了一个list
- MySQL字符集小结
- 深入浅出LVM on linux
- Postman 导出 curl命令 到命令行运行 Mac OS
- java流传输_Java 运用流传输文件
- seaweedfs使用说明
- 关于dijistra算法的理解
- 近期你已经授权登录过_原来我的微信、QQ 授权登录过这么多应用!(附查找及解绑方法)...
- 分布式事务与RocketMq 事务消息
- 2.9Unicode 文本标准化
- IC卡与磁条卡的数据区别
- 记使用腾讯TIM开发聊天通讯遇到的问题及解决方案
- K860i的109升级需要的PinyinIME.apk和QuickSearchBox.apk两个文件
- QM的计算机专业,PCM5-QM170
- java opts utf 8_Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8