关于Integer对象比较,和int基本类型比较的一些问题

public class Test {

	public static void main(String[] args) {

		Integer j = 192;
		int i = 192;
		System.out.println(new Integer(12) == new Integer(12));//false对象比较。///必然不同
		System.out.println(new Integer(192) == i);//true自动拆箱
		System.out.println(j == i);//true自动拆箱
		Integer x = 127;
		Integer y = 127;
		System.out.println(x == y);//java在编译的时候,被翻译成-> Integer i5 = Int//eger.valueOf(127);
		Integer k = 128;
		Integer l = 128;
		System.out.println(k == l);
	}

}
public static Integer valueOf(int i) {
         assert IntegerCache.high >= 127;
         if (i >= IntegerCache.low && i <= IntegerCache.high)            
        	 return IntegerCache.cache[i + (-IntegerCache.low)];
         return new Integer(i);
    }

上面为Integer的valueOf源码对于-128到127之间的数,会进行缓存,Integer = 127时,会将127进行缓存,下次再写Integer = 127时,就会直接从缓存中取,就不会new了。所以小于等于127时候会true大于会false。。当然-128以下亦然

关于Integer对象比较,和int基本类型比较的一些问题

时间: 2024-08-26 02:52:11

关于Integer对象比较,和int基本类型比较的一些问题的相关文章

Convert integer to string(int类型转化为string类型)

译: 这是一个常见的问题,但是对于这个问题我没有找到一个很好的方法:如何将整数类型转化为字符串类型?我遇到过几种解决方案.我不会使用stringstream.sprintf()函数也遇到了问题,并且它是C语言的风格.函数itoa()以前工作地很好,但参考文档说: 这个函数在ANSI-C中没有被定义,并且它不是C++的一部分,但有些编译器支持 并且这个函数也是C语言风格. 我自己写了一个C++风格的函数,并且它工作起来没有错误(译者注:我不这么认为,详见后文). string convertInt

java 13-4 Integer和String、int之间的转换,进制转换

1.int类型和String类型的相互转换 A.int -- String 推荐用: public static String valueOf(int i) 返回 int 参数的字符串表示形式. B.String -- int 推荐用: public static int parseInt(String s) 将字符串参数作为有符号的十进制整数进行解析 1 public class IntegerDemo { 2 public static void main(String[] args) {

iOS 当用到第三方的文件的时候,警告 implicit conversion loses integer precision:&#39;long&#39; to &#39;int &#39;

在我们的项目中,通常使用了大量的第三方代码,这些代码可能很复杂,我们不敢改动他们,可是作者已经停止更新了,当sdk升级或者是编译器升级后,这些遗留的代码可能会出现许许多多的警告,那么我们有没有办法去掉这些烦人的警告,不然一个工程几百个警告,我们怎么去掉警告呢 ,对于第三方,我们肯定是不想改动它的,尤其是一些更新很频繁的第三方,一般警告出现后不久,作者就更新了,我们在此做这样的操作,就显得浪费了.并且在 添加arm64支持的时候,一下出现几百个某种类型的警告,改起来也是相当费时费力 1:关闭某一个

Integer对象大小比较问题

一.问题 先来看一看例子 public class IntegerTest { public static void main(String[] args) throws Exception { Integer a1 = 127; Integer b1 = Integer.valueOf(127); System.out.println("1:"+(a1 == b1)); Integer a2 = 127; Integer b2 = 127; System.out.println(&q

Why Python&#39;s Integer Division Floors ---- python int(6/-132)时答案不一致,向下取整

leetcode150题中有一个步骤: int(6/-132) == 0 or ==-1? 在自己本地python3环境跑是int(6/-132) =0,但是提交的时候确实-1. 查找相关资料解惑: Why Python's Integer Division Floors为何Python整除运算采用向下取整的规则 今天(又)有人问我,为什么Python中的整除(integer division)返回值向下取整(floor)而不是像C语言中那样向0取整. 在正整数范围内,两者并无实质差别,例如:

Item 30 用enum代替int常量类型枚举,string常量类型枚举

1.用枚举类型替代int枚举类型和string枚举类型 public class Show { // Int枚举类型 // public static final int APPLE_FUJI = 0; // public static final int APPLE_PIPPIN = 1; // public static final int APPLE_GRANNY_SMITH = 2; public enum Apple { FUJI, PIPPIN, GRANNY_SMITH } pub

JAVA中Integer对象的引用

JAVA中没有指针一说,但也有引用的概念.这里要说的主要是Integer是不是同一个对象. 1.先看一段代码: public static void main(String[] args){ Integer a1 = 100; Integer b1 = a1;//另一种也可以b1=100 Field field = null; try { field = a1.getClass().getDeclaredField("value"); } catch (NoSuchFieldExcep

泛型类中,获取当前new的对象的 T的真实 类型

public abstract class BaseDaoImpl<T> implements BaseDao<T> { @Resource private SessionFactory sessionFactory; private Class<T> clazz; public BaseDaoImpl() { // 使用反射技术得到T的真实类型 ParameterizedType pt = (ParameterizedType) this.getClass().get

让实体对象自行决定留存操作类型(增删改)

本文中不考虑数据库并发的影响和缓存效率问题. 实体对象的留存指把对象改变保存回数据存储中,就数据库而言就是INSERT.UPDATE.DELETE.1.从数据源加载的实体未发生改变,则不需执行留存操作.2.新建的实体留存时执行INSERT.3.从数据源加载的实体发生了改变,留存时执行UPDATE.4.客户端决定删除某实体时,执行DELETE. 留存操作的决定者1.客户端可以充当留存操作的决定者,在UI层实现,需要客户端根据判断调用不同的增删改方法.不推荐.2.(推荐)实体自身也可以充当留存操作的