java类型作为参数传递的问题
- 基本类型
- 对象类型
在实际开发中,在抽取公共方法的时候,对于一些值传递并没有做深入的了解,导致碰到了问题,现在对于值传递进行总结。
基本类型
对于基本类型,在Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型,同时还包括我们经常使用到的BigDecimal类型:
在方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际传入参数的值,这个时候是值传递。
public static void main(String[] args) {
Integer a = 0;
String name = "name";
BigDecimal area = BigDecimal.ZERO;
getmsg(name,a,area);
System.out.println(a);
System.out.println(name);
System.out.println(area);
}
// 方法调用
public static void getmsg(String name,Integer a, BigDecimal area){
a = a+1;
name = "name"+"name";
area= BigDecimal.ONE;
}
运行的结果如下:
从上面可以看出,对于原来的值并不会进行改变,只是简单的值传递。
对象类型
对象类型java中有包含了,实体列,数组,集合对象(Map,List)等。
方法调用时,参数传递的是对象的引用(地址),即在方法调用时,实际参数把对对象的引用(地址)传递给形式参数。这是实际参数与形式参数指向同一个地址,即同一个对象(数组),方法执行时,对形式参数的改变实际上就是对实际参数的改变,这个结果在调用结束后被保留了下来。
public static void main(String[] args) {
HashMap<Object, Object> map = new HashMap<>();
map.put("name","黄");
map.put("sex","男");
ArrayList arrayList = new ArrayList();
arrayList.add("1");
arrayList.add("2");
getmsg2(ss,map,arrayList);
System.out.println("数组的值:"+Arrays.toString(ss));
System.out.println("map的值"+map.toString());
System.out.println("list的值"+arrayList.toString());
}
// 调用方法
public static void getmsg2(String[] ss,Map map,ArrayList list){
map.put("addr","北京");
ss[0]="55";
list.add("3");
}
运行结果:
从上面的运行结果可以看出,对于对象类型的传递是引用(地址)传递给形式参数,会 改变值
一种情况,如果在方法调用时如果重新创建一个对象赋值给传入进来的参数,这个赋值是无校的,仍然是原来的值,因为这个就赋值了一个新的地址,所以不会改变原来的值:
将上面的getmsg2调用方法进行更改,
public static void getmsg2(String[] ss,Map map,ArrayList list){
HashMap<Object, Object> map1 = new HashMap<>();
map1.put("addr","北京");
map = map1;
}
运行结果还是原来的值:
另一种情况,也是由对象的引用(地址),新创建一个对象,原来对象赋值给新的对象,这时修改新的对象的值,也会导致原来对象值的改变。
public static void main(String[] args) {
HashMap<Object, Object> map = new HashMap<>();
map.put("name","黄");
map.put("sex","男");
HashMap<Object, Object> map2 = new HashMap<>();
map2= map;
map2.put("name","宗");
System.out.println(map);
}
文章到此结束,欢迎大家在底下留言,如果有什么不对的问题,请多多指导!