java方法传参方式---到底是传值还是传址,还是两者都不对!!!

2024-02-26 03:08

本文主要是介绍java方法传参方式---到底是传值还是传址,还是两者都不对!!!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


       今天刚好领导写了几个面试新人的基础题,其中就有一道涉及java方法传值的题目,其实这个问题不仅对一些新人有难度,甚至可能对一些工作了好多年的人都搞不清楚,今天我就在这里简单的和大家分享下.

  题目如下:

package com.eden.coreLearn.javacore;import java.util.Arrays;/*** 类Parameter.java的实现描述:TODO 类实现描述 <br>* 测试java的传参方式(到底是传值还是传址)* * @author wangding_91@163.com 2016年3月10日 下午10:05:53*/
public class Parameter {static void exchange(String str2) {str2 = "cde";}static void exchange(int i) {i = 1;}static void exchange(char[] c) {c[0] = 'd';}public static void main(String[] args) {char[] a = new char[] { 'g', 'o', 'o', 'd' };int j = 0;String str1 = "abc";exchange(str1);exchange(a);exchange(j);System.out.println("str1=" + str1);System.out.println("a=" + Arrays.toString(a));System.out.println("j=" + j);}}



代码非常简单,然后要求说出输出结果。。。估计好多人咋一看,直接懵逼了!!!

先告诉大家结果:

str1=abc
a=[d, o, o, d]
j=0

从结果来看,只有数组a的值被改掉了,其他两个值都没被改掉,来分析下:

首先看str1

1:首先str2被初始化为str1的一个拷贝,str2和str1都是指向常量池中"abc"常量的引用

2:然后将str2指向新的常量"cde",但是和str1毛关系都没有

3:方法结束,str2被回收,str1的值不会有任何改变


再看char[] a

1:同样的char[] c初始化为new char['g','o','o','d']的引用char[] a的一个拷贝,即c和a指向同一个对象

2:利用c改了c指向的数组中的第一个元素,而a也是指向的这个数组

3:方法结束,c回收,而a指向的数组已经被改了,所以a能看见


int j就不说了,只是int是基本类型,这是不是引用的拷贝而是j本身的拷贝


总结:

   1:一个方法不能修改一个基本数据类型的参数

   2:一个方法可以改变一个对象的状态(属性)

   3:一个方法不能实现让对象参数引用一个新的对象


TODO

 String str = new String("123");这句话创建了几个对象????

 Integer i1 = new Integer(1);

 Integer i2 = Integer.valueOf(1);

 Integer i3 = Integer.valueOf(1);

 System.out.println(i1==i2+"---------------"+i2==i3); 结果打印什么???

 这些就留给大家自己想想好了,O(∩_∩)O哈哈~(都是常见的java基础题目)


这篇关于java方法传参方式---到底是传值还是传址,还是两者都不对!!!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/747536

相关文章

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Go 1.23中Timer无buffer的实现方式详解

《Go1.23中Timer无buffer的实现方式详解》在Go1.23中,Timer的实现通常是通过time包提供的time.Timer类型来实现的,本文主要介绍了Go1.23中Timer无buff... 目录Timer 的基本实现无缓冲区的实现自定义无缓冲 Timer 实现更复杂的 Timer 实现总结在

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

nginx upstream六种方式分配小结

《nginxupstream六种方式分配小结》本文主要介绍了nginxupstream六种方式分配小结,包括轮询、加权轮询、IP哈希、公平轮询、URL哈希和备份服务器,具有一定的参考价格,感兴趣的可... 目录1 轮询(默认)2 weight3 ip_hash4 fair(第三方)5 url_hash(第三

springMVC返回Http响应的实现

《springMVC返回Http响应的实现》本文主要介绍了在SpringBoot中使用@Controller、@ResponseBody和@RestController注解进行HTTP响应返回的方法,... 目录一、返回页面二、@Controller和@ResponseBody与RestController

JAVA集成本地部署的DeepSeek的图文教程

《JAVA集成本地部署的DeepSeek的图文教程》本文主要介绍了JAVA集成本地部署的DeepSeek的图文教程,包含配置环境变量及下载DeepSeek-R1模型并启动,具有一定的参考价值,感兴趣的... 目录一、下载部署DeepSeek1.下载ollama2.下载DeepSeek-R1模型并启动 二、J