挖掘两个Integer对象的swap的内幕
public class SwapTest {
public static void main(String[] args) throws Exception {
Integer a = 1, b=2;
System.out.println("before===="+"a:"+a+"b:"+b);
swap(a, b);
System.out.println("after====="+"a:"+a+"b:"+b);
}
private static void swap(Integer a, Integer b) throws SecurityException, NoSuchFieldException, Exception {
Field field= Integer.class.getDeclaredField("value");
field.setAccessible(true);
Integer tmp = new Integer(a.intValue());
field.set(a, b.intValue());
field.set(b, tmp);
}
}
运行结果:before====a:1b:2
after=====a:2b:1
发掘的要点:
1、包装类引用传递,普通变量是值传递,引用传递传递的是内存地址,不能修改值
public static void main(String[] args) throws Exception {
Integer a = 1, b=2;
System.out.println("before===="+"a:"+a+"b:"+b);
swap(a, b);
System.out.println("after====="+"a:"+a+"b:"+b);
}
private static void swap(Integer m, Integer n) throws SecurityException, NoSuchFieldException, Exception {
Integer tmp = m;
m = n;
n = tmp;
}
运行结果:before====a:1b:2
after=====a:1b:2
2、需要通过反射修改private final变量
3、Integer包装类中的-127-128之类有缓存
4、Integer的自动装箱解箱
挖掘两个Integer对象的swap的内幕的更多相关文章
- java中两个Integer类型的值相比较的问题
今天在做一个算法时,由于为了和其他人保持接口的数据类型一致,就把之前的int换为Integer,前几天测了几组数据,和之前的结果一样,但是今天在测其它数据 的时候,突然出现了一个奇怪的bug,由于之前 ...
- java integer对象判断两个数字是否相等
java integer对象判断两个数字是否相等,不一定对 问题发生的背景:javaweb的项目,起先,因为在java中实体类中的int类型在对象初始化之后会给int类型的数据默认赋值为0,这样在很多 ...
- 比较两个Long对象值
比较两个Long对象的值是否相等,不可以使用双等号进行比较,(long int Integer可以用双等号进行比较)可以采用如下方式: 1.使用equals方法进行比较 Long a=new Long ...
- 给Integer对象加锁的错误方式
package com.thread.test; public class BadLockOnInteger implements Runnable { public static Integer i ...
- 工作随笔—integer对象比较
问题:对于integer对象,当比较2==2的时候,返回的值是true还是false?当比较2000==2000的时候,返回的值是true还是false? 回答:当比较2==2的时候,返回的值是tru ...
- 两个Integer比较大小需要注意的误区
通过下面的例子,来了解integer比较大小需注意的几点. eg.定义Integer对象a和b,比较两者结果为:a不等于b Integer a = 1; Integer b = 1; if(a==b) ...
- Integer对象大小比较问题
一.问题 先来看一看例子 public class IntegerTest { public static void main(String[] args) throws Exception { In ...
- 从 Int 到 Integer 对象,细细品来还是有不少东西
int 是 Java 八大原始类型之一,是 Java 语言中为数不多不是对象的东西,Integer 是 int 的包装类,里面使用了一个 int 类型的变量来存储数据,提供了一些整数之间的常用操作,常 ...
- Integer对象
数字格式的字符串转成基本数据类型的方法: 1:将该字符串封装成了Integer对象,并调用对象的方法intValue(); 2:使用Integer.parseInt(numstring):不用建立对象 ...
随机推荐
- MT【231】棋子方法数
设有5枚无区别的棋子放在如图$5*5$的棋盘的小方格中,放棋子的规则是每行每列放且仅放一个棋子,同时,不允许放在黑方格内,则共有______ 方法. 答案:5的错排数44.第一行的数不放第二列(相当于 ...
- 添加AD RMS role时,提示密码不能被验证The password could not be validated
"The password could not be validated" when attempting to provision an AD RMS server. Sympt ...
- luogu3628 特别行动队 (斜率优化dp)
推出来式子以后斜率优化水过去就完事了 #include<cstdio> #include<cstring> #include<algorithm> #include ...
- A1097. Deduplication on a Linked List
Given a singly linked list L with integer keys, you are supposed to remove the nodes with duplicated ...
- 【洛谷P3224】永无乡 并查集+Splay启发式合并
题目大意:给定 N 个点的图,点有点权,初始有一些无向边,现在有 Q 个询问,每个询问支持动态增加一条无向边连接两个不连通的点和查询第 X 个点所在的联通块中权值第 K 大的是哪个点. 题解:学会了平 ...
- C# 获得本机IP、端口等信息地址以及服务器IP信息
大概是这样子,代码也没多少,直接上代码了.. 引入命名空间: using System.Net; namespace IPExample { public partial class Form1 : ...
- (转)在Eclipse中创建Maven多模块工程
背景:以前只总结了怎么在命令行下创建maven的多模块项目,在eclipse下怎么创建不是很清楚.最近需要在git的资源库中上传多模块项目,方便后期的维护,所以将网上的资料进行整理. 原文链接:htt ...
- GBDT原理详解
从提升树出发,——>回归提升树.二元分类.多元分类三个GBDT常见算法. 提升树 梯度提升树 回归提升树 二元分类 多元分类 面经 提升树 在说GBDT之前,先说说提升树(boosting tr ...
- 误删除 linux 系统文件了?这个方法教你解决
转载于互联网并适当的修改 误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题.方法总比问题多~ 说在前面的话 针对日常维护操作,难免会出现文件误 ...
- java程序中加入@SuppressWarnings("serial")是什么意思?
比如有个类实现了java.io.Serialize接口:package com.onede4.test; public class TestSerial implements java.io.Seri ...