Java内涵题目

题: 定义两个 Integer 对象传递给一个方法, 方法执行后两个 Integer 的值需要互相转换
public static void practise(MyConsumer<Integer> consumer) {
	Integer value1 = 1;
	Integer value2 = 2;
	System.out.println("start: value1=" + value1 + ", value2=" + value2);
	consumer.accept(value1, value2);
	System.out.println("end: value1=" + value1 + ", value2=" + value2);
}
@FunctionalInterface
public interface MyConsumer<T> {
	void accept (T value1, T value2);
}

编程方式一: 传值与传引用的区别

practise((value1, value2) -> {
    Integer temp = value1;
    value1 = value2;
    value2 = temp;
    return;
});
输入结果:
	start: value1=1, value2=2
	end: value1=1, value2=2

编程方式二: Integer 在 -127 ~ 128 之间的缓存

practise((value1, value2) -> {
    try {
        Field declaredField = Integer.class.getDeclaredField("value");
        declaredField.setAccessible(true);

        Integer intValue = value1.intValue();
        declaredField.set(value1, value2);
        declaredField.set(value2, intValue);
    } catch (Exception e) {}
    return;
});
输出结果: 
	start: value1=1, value2=2
	end: value1=2, value2=2

integer.png

编程方式三: 清空缓存

practise((value1, value2) -> {
    try {
        Field declaredField = Integer.class.getDeclaredField("value");
        declaredField.setAccessible(true);

        Integer intValue = new Integer(value1.intValue());
        declaredField.set(value1, value2);
        declaredField.set(value2, intValue);
    } catch (Exception e) {}
    return;
});
输出结果: 
	start: value1=1, value2=2
	end: value1=2, value2=1
输出结果
public static void main(String[] args) {
    int iVal = 1;
    double dVal = 1.0000000000000001;

    System.out.println("result:" + (iVal == dVal));
}

输出结果

/**
 * int temp = i;
 * i = i + 1;
 * i = temp;
 */
int i = 0;
i = i++;
System.out.println(i);
  • 这里存在的问题在于: i++ 执行的操作是: - -

Arrays.asList();

String[] aryString = {
    "JDK", "JRE", "JVM",
    "JavaME", "JavaSE", "JavaEE"
};

List<String> listString = Arrays.asList(aryString);

listString.forEach(System.out::println);

aryString[0] = "update";

listString.forEach(System.out::println);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值