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

相关文章

泛型和Integer小结

泛型在Java.util里面找:也可对其他你使用的函数进行查阅 如下:只要函数后面跟有尖括号<>,你都可以拿过来使用泛型     注意:用到集合时尽量使用泛型       int与Integer   integer这个不是关键字,是java的一个类。也就是int的包装类。int是基本数据类型,integer是引用类型,包含很多属性和方法,而int只是一个值,没有其他的任何

Linux float int和16进制互相转换

Linux 上float int和16进制互换操作。之前把float转16进制,也就是转成4个字节,方便使用串口传输嘛。使用的方法是: //float 转 16进制float x_pid_p = 15.0;unsigned char * bValue = (unsigned char *)& x_pid_p;printf("%x\t%x\t%x\t%x\n", bValue[0], bVa

Integer能表示十进制的多少位?

Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。在32位机器上,能表示的最大值是2^32 = 4 294 967 296。 111111111111超过了最大表示范围,所以会报错。   超过了Integer的存值范围,Integer存值的范围是 -2的31次方 到 2的31次方-1 的常量   I

理解Python中的类型不兼容性:为什么 `dict[int, int]` 不兼容 `dict[int, int | str]`

在使用Python的类型提示时,开发者可能会遇到一些看似不合理的类型不兼容错误。一个典型的问题是,为什么 dict[int, int] 不能赋值给 dict[int, int | str]。本文将详细探讨这个问题,并提供一些解决方法。 例子分析 考虑以下代码片段: import typing# 定义两个字典a: dict[int, int] = {}b: dict[int, int |

Integer 类型数据比较相等的那些坑

public void testInter() {Integer a = new Integer(200);Integer b = new Integer(200);Integer c = 200;Integer e = 200;int d = 200;Object o=200;System.out.println("基本类型和数字常量 ==判断"+(o==c));System.out.pr

isinstance bool int

a=1 isinstance(a,int) True isinstance(a,bool)False a=True isinstance(a,int) True isinstance(a,bool) True isinstance(int,bool) False isinstance(bool,int) False

String与Integer的相互转化

一、Integer转String //方法一:Integer类的静态方法toString()Integer a = 2;String str = Integer.toString(a)//方法二:Integer类的成员方法toString()Integer a = 2;String str = a.toString();//方法三:String类的静态方法valueOf()Intege

(VB.Net)Integer转 Byte数组

1、Integer转单个字节 Public Function iByte(ByVal i As Integer) As ByteDim b() As Byte = BitConverter.GetBytes(i)Return b(0)End Function 2、Integer转双字节 '低字节在前,高字节在后Public Function iByte2(ByVal i As Integ

java int 与 integer的区别

int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者而integer 是后者(也就是一个类);因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null. 2.初始化时:

ASP.NET MVC企业级程序设计(增删,int类型转时间取余)

目录 题目:  实现过程  控制器代码 DAL  BLL Index  Jia 题目:    实现过程  控制器代码 using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using MvcA