int与Integer___

2024-06-13 01:18
文章标签 integer int

本文主要是介绍int与Integer___,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对java中int与Integer的一些理解 (2012-08-01 16:42:04)转载▼
标签: it 分类: JavaSE
10天前无意间拜读了冰耗童鞋(java编程网http://www.haohaoblog.com)的“java中的String详解—-new对象和常量池的概念”这篇文章,时值兴起,不禁留言“提个问题,Integer i1=new Integer(0)与int i2=0,“i1==i2”为什么返回为true? 假如从String的内存观出发理应返回的是false。。。”。等待高见的同时自己也编写代码试了下
首先给大家看一个例子:
package javabasicClass.type;
public class Type {
public static void main(String[] args) {
Integer i1=new Integer(128);
int i2=128;
System.out.println(“—new Integer与int—”+(i1==i2)); true
Integer i3=new Integer(128);
System.out.println(“—new Integer与new Integer—”+(i1==(i3))); false
Integer i4=128;
Integer i44=127;
System.out.println(“—Integer与int—”+(i3==i4));false
Integer i5=128;
Integer i55=127;
System.out.println(“—Integer为128与Integer为128—”+(i4==i5));false
System.out.println(“—Integer为127与Integer为127—”+(i44==i55));true
String a=”123”;
String b=new String(“123”);
System.out.println(“—String与new String——”+a==b);false
}
}
假如从String的内存观出发,大部分运行结果应该都不是这样的,这是什么原因呢?我当时也有点犯糊涂,可能当时也有其他事加上指望耗哥的回复后面搞着搞着也就把这事忘了。。。
十天后耗哥终于有回复了,方醒那些天提过的这么一个问题==!
回复如下:
java_bird:
哈哈,终于被你看到这个问题了,String机制不一定适用与其他的封装类,更何况,String不是一种封装类,它没有对应的原始数据类型,String机制里面,只要内容相同,哈希码就相同,但是“==”的时候是判断对象所存的地址,而Integer的哈希码即是括号里面的数值,在判断“==”的时候,对于对象来说是比较两者在内存中的地址,对于一个是int,一个是integer,“==”比较的是数值!因为int是原始数据类型,也叫简单数据类型,而Integer的复杂数据类型,也叫引用数据类型!而String属于后者,String没有原始数据类型!明白木有…..顺带问你个问题,Integer i=100,i1=100;Integer i2=188,i3=188;请问i2==i3么?i==i1么?

可能回复的有些高深,看不懂的朋友不用太紧张,因为我也有点凌乱 ,差距绝对是差距 ==!

好吧,带着他的问题回去认真的再百度了一遍。。。

明了,理解如下:
Integer与Integer间的比较,从jdk1.5开始,有“自动装箱”这么一个机制,在byte-128到127范围内(ps整型的八位二进制的表示的范围为-128到127),如果存在了一个值,再创建相同值的时候就不会重新创建,而是引用原来那个,但是超过byte范围还是会新建的对象。综上,i==i1为true,i2==i3为false。 有装箱是不是也有拆箱?哈,补充一下——自动拆箱机制,基本数据类型和对象比较的时候,对象会自动拆箱为基本数据类型再比较,比较的就是里面的值而不是地址,如
Integer i1=new Integer(128);
int i2=128;
i1==i2;
对象i1经历拆箱过程先变为int i1=128;当然之后的比较结果也是不言而喻了~
对了,理论加实践只为更形象生动 O(∩_∩)O 实践如下:
package javabasicClass.type;
public class Type {
public static void main(String[] args) {
Integer i1=new Integer(128);
int i2=128;
//经历拆箱过程将i1对象变为int i1=128;所以为true
System.out.println(“—new Integer与int—”+(i1==i2));
Integer i3=new Integer(128);
//两个都是new。。两个对象间的比较,比较的是地址,所以为false
System.out.println(“—new Integer与new Integer—”+(i1==(i3)));
Integer i4=128;
Integer i44=127;
//不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
System.out.println(“—new Integer与Integer—”+(i3==i4));
Integer i5=128;
Integer i55=127;
//Integer与Integer间的比较,自动装箱过程,超过范围则创建新对象
System.out.println(“—Integer为128与Integer为128—”+(i4==i5));
System.out.println(“—Integer为127与Integer为127—”+(i44==i55));
//补充(String)
String a=”123”;
//在堆创建一个对象被b引用,然后堆中的值指向常量池的“123”
String b=new String(“123”);
//两者指向的地址不同,所以为false
System.out.println(“—String与new String——”+a==b);
}
}

此致,上面的疑惑也迎刃而解了吧。

想起了某人说过的那句:“把平时出现的问题记录下来,自己就可以一点一点进步了。”

哈,与君共勉。

int 是基本类型,直接存数值

  integer是对象,用一个引用指向这个对象

  1.Java 中的数据类型分为基本数据类型和复杂数据类型

  int 是前者>>integer 是后者(也就是一个类)

 Integer 是对象类型 int是原始类型 适用场合有很大的不同 之所以要把int封装成Integer 型 是因为很多方法参数就只接收对象类型(Object) 还比如 范型 就只支持 对象类型

例如往ArrayList里面add,必须add的是Object而int不是对象,就只能把Integer添加进去

  2.初始化时>>

  int i =1;

  Integer i= new Integer(1);(要把integer 当做一个类看)

  int 是基本数据类型(面向过程留下的痕迹,不过是对java的有益补充)

  Integer 是一个类,是int的扩展,定义了很多的转换方法

  类似的还有:float Float;double Double;string String等

  举个例子:当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的,因为容器都是装 object的,这是就需要这些内建类型的外覆类了。

  Java中每种内建类型都有相应的外覆类。

  Java中int和Integer关系是比较微妙的。关系如下:

  1.int是基本的数据类型;

  2.Integer是int的封装类;

  3.int和Integer都可以表示某一个数值;

  4.int和Integer不能够互用,因为他们两种不同的数据类型;

这篇关于int与Integer___的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055882

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

【C语言】---- 基本数据类型(char、int、float)

1 基本数据类型 C语言中的基本数据类型包括整型、浮点型和字符型,每种类型都有不同的存储大小和表示范围。以下是它们的常见表示形式和特点: 1.1 字符型 char类型用于表示单个字符,通常用于表示文本数据。char类型也被用来存储字符,但也可以用来存储较小的整数。在C语言中,char类型的大小一般为1字节(8位)。char类型可以是有符号的或无符号的,这取决于编译器和平台的实现。 1.2

如何简便的将List<Integer>转换成int[]?

使用Java 8的流(Streams)  ArrayList<Integer> list = new ArrayList<>();int[] intArray = list.stream().mapToInt(Integer::intValue).toArray();  若是maven项目可使用Apache Commons Lang库 <dependency> <groupId>

[LeetCode] 7. Reverse Integer

题:https://leetcode.com/problems/reverse-integer/description/ 题目 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123Output: 321Example 2:Input: -123Output: -321Ex

Syntax error on token int, VariableDeclaratorId expected after this token

Syntax error on token "int", VariableDeclaratorId expected after this token,看图,   <item name=" " type="id"/>; 这个的name没有,看图 删掉这行就行了,R.java就不会报错了!!!!!!!!!!!

MySQL数据类型 int(M)中M含义

int(M)我们先来拆分,int是代表整型数据那么中间的M应该是代表多少位了,后来查mysql手册也得知了我的理解是正确的,下面我来举例说明。 MySQL 数据类型中的 integer types 有点奇怪。你可能会见到诸如:int(3)、int(4)、int(8) 之类的 int 数据类型。刚接触 MySQL 的时候,我还以为 int(3) 占用的存储空间比 int(4) 要小, int(4)

LeetCode - 12. Integer to Roman

12. Integer to Roman  Problem's Link  ---------------------------------------------------------------------------- Mean:  将一个int型的整数转化为罗马数字. analyse: 没什么好说的,直接维基百科. Time complexity: O(

带小数的String转整数Integer

其实String和Integer、Float、Double等相互转换这都很容易。可是带小数的String转Float、Double可能会出现“模糊数字”。 那么怎么避免呢?见下实例和结论。 System.out.println("**********2.4***********");String a = "2.4"; System.out.println(a); // 2.4System.o

Insertion Sort Integer Array Insertion Sort Linked List

Sort Integer Array using Insertion sort. //********************************************************************************************************/* Insertion Sort 原理:就是前面的sort部分全部是相对值,从后面拿一个元素,然后跟

Subtract the Product and Sum of Digits of an Integer

Given an integer number n, return the difference between the product of its digits and the sum of its digits. Example 1: Input: n = 234Output: 15 Explanation: Product of digits = 2 * 3 * 4 = 24