挖掘两个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):不用建立对象 ...
随机推荐
- FFT ip core
The FFT core provides four architecture options to offer a trade-off权衡取舍 between core size andtransf ...
- BZOJ3829[Poi2014]FarmCraft——树形DP+贪心
题目描述 In a village called Byteville, there are houses connected with N-1 roads. For each pair of ho ...
- Codeforces Round #394 (Div. 2) C. Dasha and Password
C. Dasha and Password time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- TensorFlow分布式计算机制解读:以数据并行为重
Tensorflow 是一个为数值计算(最常见的是训练神经网络)设计的流行开源库.在这个框架中,计算流程通过数据流程图(data flow graph)设计,这为更改操作结构与安置提供了很大灵活性.T ...
- 自学Linux Shell9.4-基于Red Hat系统工具包存在两种方式之二:源码包
点击返回 自学Linux命令行与Shell脚本之路 9.4-基于Red Hat系统工具包存在两种方式之二:源码包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方式 ...
- 一个简单的mock server
在前后端分离的项目中, 前端无需等后端接口提供了才调试, 后端无需等第三方接口提供了才调试, 基于“契约”,可以通过mock server实现调试, 下面是一个简单的mock server,通过pyt ...
- UVALive - 6440(模拟)
题目链接:https://vjudge.net/contest/241341#problem/G 题目大意:输入一个N,n次操作.对于第一种操作增加一个病人,告诉病人的t0,st0,r.第二种操作,在 ...
- Python文件和异常
程序和运行时数据是在内存中驻留的,涉及到数据交换的地方,通常是磁盘.网络等,因此需要IO接口. IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单 ...
- A1060. Are They Equal
If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered ...
- .net Forms身份验证不能用在应用的分布式部署中吗?
参照网上的一些方法,使用Forms身份验证对应用进行分布式部署,发现没有成功. 应用部署的两台内网服务器:192.168.1.19,192.168.1.87,使用Nginx做负载分配,配置完全相同:每 ...