一个基本类型在方法中修改引起的思考
2017-02-13 10:44
260 查看
一个基本类型在方法中修改引起的思考?
今天同事在RTX群中问了一个问题:如何能写一个方法,输出a=100, b=100
public static void main(String[] args) { int a = 10; int b = 10; method(a, b);// 静态方法 System.out.println("a=" + a + ", " + "b=" + b); }
本来想着直接在method中对a, b赋值不就好了,这么简单。再想了一下应该不会这么简单,然后开始回忆primitive type的存储是怎么样的。
primitive type是存在栈中的,并且有值的。object type是将引用存在栈中,但是对应的栈中的值是引用,真正的值放在heap中。
那么应该可以啊。然后动手一试,结果不行。但记得list修改是可以的,于是再测试list,发现List是可以的。
上SO去查查吧。
于是得到以下结论:
java在给method传参的时候,都是传值的。即pass-value-only.
对于基本类型,传进去的是 标识符 对应的值,然后再使用一个新的 标识符 指向它。对于对象类型的话, 传进去的是 引用 指向的值,然后再使用一个新的 引用 指向它。这两句话总结来说,就是传进去的是对应的内存地址, 然后fork一个标识符或者引用。
那么对于不可变的变量来说,每次变更都会分配一个不同的内存地址给fork出来的引用。这样就不会对原来的变量有影响。 对于可变的变量来说,内存地址没有变化,但是内存地址中的东西发生了变化,那么对应于原来的引用和fork出来的变量就会不同。
相关文章推荐
- 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
- 一个类型转换而引起的三级事件的一些思考
- 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
- 例题4-7向一个方法的基本数据类型参数传值/4-8引用类型参数
- 用类名做方法的返回值类型 在学习Java的初始阶段,很多同学使用基本数据类型定义变量和引用类型定义变量以及使用类名做方法的返回值类型常常不知所以。今天我以自己的解读方式和个人的理解作一个简单的解释,和
- 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
- 少特化一个函数 基本类型与类类型的区别方法
- 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
- 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
- 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
- 一个方法引起的思考
- 一个类型转换而引起的三级事件的一些思考 数据检查
- 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
- 在ABAP程序中只允许一个用户修改数据的一种方法。
- 基本变成技巧--方法传值,类型应用
- 在struts中处理日期类型,以前对方法名称的一个误解
- 一个超简单的方法验证文本框中内容的数据类型
- 关于类型原型的思考(请不要在一个Map或List放入多种数据类型)