java 值传递的个人理解

Java值传递 对于初学者来说,要想把这个问题回答正确,是比较难的。在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂。所以,就有了我写这篇文章的初衷。这篇文章中,我从什么是方法的实际参数和形式参数开始,给你讲解为什么说Java中只有值传递。 辟谣时间 关于这个问题,在StackOverflow上也引发过广泛的讨论,看来很多程序员对于这个问题的理解都不尽相同,甚至很多人理解的是错误的。还有的人可能知道Java中的参数传递是值传递 阅读详情

/**
 * Created by kodulf on 2017/4/5.
 */
public class ZhiChuanDi {

    /**
     * 值传递,原来的值相当于是使用final修饰了,参数值可以随意修改
     *
     *
     * 值传递,传递值,如果是基本数据类型,那么传递的就是数据的值,如果是引用数据类型,那么就是传递的地址
     * 总体来说,默认传给参数的值是不会变的,但是参数里面的内容是会变的
     * 这个就相当于是原来的值使用final 修饰了参数(一定要注意了,这里是原来的值),基本数据类型是不变的,但是应用数据类型的引用是不会变的,但是里面的内容是可以变的。
     * 而方法里面的参数的值,如果你也想要它和原来的值一样,那么就也要使用final 来修饰(像是作用在方法里面的内部类(例如匿名内部类),如果要访问到方法里面的参数,那么该变量最好修饰为final的)
     * 值传递的测试,需要测试3个方面:
     * 1: 测试传递一个基本数据类型的
     * 2: 测试传递一个String
     * 3: 测试传递一个对象
     */
    public static void main(String[] args){
        PassTest passTest = new PassTest();
        passTest.var = 100;

        //测试传递一个基本数据类型
        int num = 11;
        passTest.changeNum(num);
        System.out.println(num);
        System.out.println("++++++++++++++++++++++++++++++++++++++++++");

        //测试传递一个String
        String s = "原文";
        System.out.println("String的hashcode ="+s.hashCode());
        passTest.changeString(s);
        System.out.println("调用完change方法后的String的hashcode ="+s.hashCode());
        System.out.println(s);
        System.out.println("++++++++++++++++++++++++++++++++++++++++++");


        //测试传递一个对象
        System.out.println("调用changeObject 之前的对象的hashcode ="+passTest.hashCode());
        changeObject(passTest);
        System.out.println("调用changeObject 之后的对象的hashcode ="+passTest.hashCode());
        System.out.println(passTest.var);
    }

    /**
     * 传递一个对象
     * @param passTest
     */
    public static void changeObject(PassTest passTest){
        System.out.println("changeObject 方法里面获取到的对象的hashcode ="+passTest.hashCode());
        passTest.var = 0;
        System.out.println("changeObject 方法里面改变了成员变量的之后的对象的hashcode ="+passTest.hashCode());
    }
}


class PassTest{
    int var = 88;

    /**
     * 改变一个基本数据类型的
     * @param num
     */
    public void changeNum(int num){
        num = 99;
    }

    /**
     * 值传递,传过来的是什么呢?
     * String 传过来的是它在内存中的地址
     * @param a
     */
    public void changeString(String a){
        System.out.println("方法中获取到的String的hashcode ="+a.hashCode());
        a = new String("changedString");
        System.out.println("方法中赋新值后的String的hashcode ="+a.hashCode());
    }
}




大模型驱动时序量化因子自动优化:从WorldQuant回测到实战策略 本文探讨了如何利用大模型驱动时序量化因子的自动优化,构建从创意生成到实战验证的完整流程。通过结合WorldQuant回测平台,搭建自动化流水线,详细拆解了因子生成、回测验证与迭代优化的核心模块。文章分享了从初版实现到进阶优化的实践经验,并指出提示词工程与领域知识注入是关键,旨在实现人机智能协作,提升量化策略研发效率。 阅读详情

相关推荐

【两方演化博弈代码复现】:双方演化博弈的原理、概率博弈仿真、相位图、单个参数灵敏度演化

演化博弈论是研究个体在特定环境中如何通过策略选择与其他个体进行互动的学科。这一理论在生物学、经济学和社会科学等多个领域都有广泛应用。本文将深入探讨双方演化博弈的原理及其过程,并解读一段 MATLAB 代码,展示如何模拟这一过程。

当回首往事的时候,不会因虚度年华而悔恨,也不会因碌碌无为而羞愧。 6198

Java中的参数传递

 Java编程语言只由值传递参数,当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。下面的代码例子可以阐明这一点:public class PassTest {                         float ptValue;                           

greatzheng的专栏 406

Open3D:Win10 + VS2017配置Open3D(C++、python)

一、下载源码 地址:https://github.com/intel-isl/Open3D 1.1 克隆源码【笔者的源码路径为D:\Open3D\Open3D】 1.2 切换版本【笔者的版本为0.8.0】 1.3 更新子模块【用于获取第三方库!很重要!】 二、CMake编译 2.1 设置路径 【source code: D:\Open3D\Open3D;build binaries: D:\Open3D】 【笔者设置CMAKE/CMAKE_INSTALL_PREFIX的路径为D:/Open.

累了就要打游戏 1万+

PassTest

public class PassTest{    float ptValue;      public static void main(String args[]){      String str;      int val;       PassTest pt=new PassTest();            val=11;      pt.changeInt(val);      S

ALEXAMAHONE的专栏 976

ESP32实战指南:SPI驱动ADXL345三轴加速度传感器的精准数据采集与姿态解算

本文详细介绍了如何使用ESP32通过SPI接口驱动ADXL345三轴加速度传感器,实现精准数据采集与姿态解算。从硬件连接到SPI通信优化,再到数据处理和低功耗策略,提供了全面的实战指南。特别适合物联网开发者和硬件工程师参考,帮助快速掌握传感器数据采集技术。

vim8coder的博客 1042

AOA(Angle of Arrival,到达角)定位算法及其误差分析的原理和MATLAB仿真_aoa定位算法

如图所示,有基站 S 1 ( x 1 , y 1 , z 1 ) , S 2 ( x 2 , y 2 , z 2 ) S_1(x_1,y_1,z_1),S_2(x_2,y_2,z_2) S1​(x1​,y1​,z1​),S2​(x2​,y2​,z2​),目标 T ( x , y , z ) T(x,y,z) T(x,y,z)。2+(z_1-z_2)^2} step1:两基站间的距离L=(x1−x2)2+(y1​−y2​)2+(z1​−z2​)2。

2401_87555613的博客 1482

如何理解java的值传递?

1、基本数据类型(值传递) java中的基本数据类型可以在栈(stack)中直接分配内存,它有以下八种: boolean,byte,char,short,int,long,float,double 2、引用数据类型(址传递 或 引用传递) 除了基本数据类型外,他们的对象的引用在栈(stack)中,对象实际存放在堆(heap)中,实际上是将对象的地址赋值了过去。 3、特殊类型(效果等同于值传递) String类型、Integer类型等,这些类型保存数据的变量是final类型,只要牵涉到数据变更,都需

隔壁老王呀的专栏 361

matlab 异常值检测与处理——Robust Z-score法【2024最新版】

博客长期更新,本文最近一次更新时间为:2024年12月9日。

点云侠的博客 1516

这一次,让你彻底明白Java的值传递和引用传递!

本文旨在用最通俗的语言讲述最枯燥的基本知识学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运...

Java后端技术 2万+

风控域——决策引擎系统设计

本文详细介绍了风控决策引擎系统的设计与应用。决策引擎系统是一种智能化工具,可自动化、数据驱动地辅助或替代人工决策,广泛应用于金融、医疗、营销、风控等领域。文章阐述了决策引擎的核心功能,包括自动化决策、动态规则管理、实时处理和模型集成,以及系统组成,涵盖数据输入层、规则引擎和模型服务层。此外,还探讨了决策引擎的典型应用场景、技术架构、组件设计,以及风控决策引擎系统的技术方案、设计难点和重点。

庄小焱 3316

YOLOv12中的A2C2f模块详解,涉及区域注意力模块(A2)和 R-ELAN 结构详解

区域注意力模块(Area Attention, A2)的设计出发点是为了解决传统注意力机制在计算复杂度和内存访问效率上的问题。传统的自注意力机制(Self-Attention)具有二次方的计算复杂度(O(n²)),尤其是在处理高分辨率图像时,计算成本非常高。此外,注意力机制的内存访问模式不如卷积神经网络高效,导致在实际应用中难以满足实时性要求。区域注意力模块通过将特征图划分为多个区域,并在每个区域内进行注意力计算,从而显著降低了计算复杂度。

Limiiiing的博客 5513

这一次,彻底解决Java的值传递和引用传递

本文旨在用最通俗的语言讲述最枯燥的基本知识 学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java只有值传递,有的博客说两者皆有;这让人有点摸不着头脑,下面我们就这个话题做一些探讨,对书籍、对论坛博客的说法,做一次考证,以得出信得过的答案。 其...

weixin_34174322的博客 1万+

【部署优化篇三】《DeepSeek边缘计算实战:把目标检测模型塞进树莓派,让AI在巴掌大的设备上“开天眼“》

谁说只有超级计算机才能跑AI?今天咱们就要在树莓派上玩转DeepSeek目标检测,让这个巴掌大的小盒子变成会‘看’世界的智能终端!本文手把手教你从零开始,把最潮的目标检测模型塞进树莓派。全程高能预警,建议准备好你的树莓派4B/5和散热风扇,咱们这就开启边缘计算的魔法之旅!

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1305

java值传递机制个人理解

人之所以痛苦,那是因为你在成长。--------magic_guo java值传递机制: 规则: java基本数据类型的值传递,传递的是变量的类型的值; java引用数据类型值传递,传递的是地址值或者null; 1.基本数据类型: 代码: public class ValueTransTest02 { public static void main(String[] args) { int m = 10; int n = 20; System.out.

magic_guo的博客 198

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

关于Java值传递的个人理解

敲黑板-----Java中只存在值传递,不存在引用传递 我们知道,Java中的常见现象: 基本数据类型作为参数传递,方法对参数的操作会随方法结束而无法保留,所以方法无法修改参数调用的对应的变量值; 引用数据类型作为参数传递,方法对参数的操作即使方法结束也会保留,所以方法可以修改参数引用的对应的变量值 那么可以说基本数据类型传递是值传递,引用数据类型传递是引用传递呢? 当然不可以,因为常见现象不代表全部现象,引用数据类型传递依然存在无法保留操作的情况,来来来来个栗子 public static

MojaveGhost1057的博客 226

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

个人理解java参数按值传递

Java 程序设计语言对对象采用的不是引用调用,对象引用是按 值传递的。 方法参数传递规则: ①一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。 ②一个方法可以改变一个对象参数的状态(set方法等)。 ③一个方法不能让对象参数引用一个新的对象。 就是方法传递对象参数时。 可以修改对象一些属性值,但不能将这个对象引用到另一个对象,因为传递的是对象地址值,而不是这个对象的引用。 ...

weixin_43568232的博客 165

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java “值传递和引用传递”个人理解

最近一直在纠结java 中的 值传递和引用传递 经过各种百度了解 触摸到了一点点 希望求证 请大家指正(jdk 1.8下);在百度上随处可见对于值传递和引用传递 大家一致理解是基础类型和对象的区别:在传递一个基础类型 的时候 会创建一个空间去保存值(生成值副本)但是引用传递保存的却是一个指向堆内存的地址 所以就产生了值传递和引用传递;但是,在百度中我也发现 其实在创建一个基础类型变量的时候,栈内存中

gczlz的博客 500

当面试官问我————Java是值传递还是引用传递?

面试官:你好,你能说出下面个程序的执行结果吗? public class Test { public static void main(String[] args) { String name = "Scott"; int age = 5; User user = new User(); user.setName(name); user.setAge(age); S...

Morty的技术乐园 7813

Java值传递的一些理解

首先,不要纠结于 Pass By Value 和 Pass By Reference 的字面上的意义,否则很容易陷入所谓的“一切传引用其实本质上是传值”这种并不能解决问题无意义论战中。 更何况,要想知道Java到底是传值还是传引用,起码你要先知道传值和传引用的准确含义吧?可是如果你已经知道了这两个名字的准确含义,那么你自己就能判断Java到底是传值还是传引用。 这就好像用大学的名词来解释高中的题目,对于初学者根本没有任何意义。 一:搞清楚 基本类型 和 引用类型的不同之处 int num = 10;.

Qingyun 's blog 3281

深入理解java值传递

我们在这里通过具体的代码示例来讲解java中的值传递 1、首先我声明一个Student类,用于测试 package com.test; /** * @author zte * @date 2020-05-07 18:01:06 */ public class Student { /** * 为了方便测试,我这里声明为public */ public...

╱/.独﹄無㈡oоΟ的博客 5730

Java的值传递理解

前言 前段时间在群里看到类似这样一个问题,下面的代码会输出什么呢? public void test() {   String str = "hello";   change(str);   System.out.println...

Superwwz的博客 488

Java 值传递与引用传递

Java参数传递机制深度解析:只有值传递,没有引用传递 本文系统阐述了Java参数传递的核心机制,明确指出Java中只有值传递,不存在引用传递。对于基本类型,传递的是值的副本;对于引用类型,传递的是对象引用地址的副本。文章通过内存模型分析、20+代码实例和与其他语言的对比,揭示了以下关键点: 值传递的本质是传递副本,形参修改不影响实参 引用类型看似"引用传递"的表现,实则是通过地址副本修改共享对象 Java选择单一值传递机制是为了简化设计、确保安全 开发中需注意不可变对象、引用重新赋值等

果酱 の 博客 1569

如何理解Java中的值传递?

如何理解Java中的值传递? 我们都知道,在Java语言中没有指针这一说法,所以Java中是不存在引用传递的, Java中的方法调用都是按值传递,那我们应该如何理解Java的按值传参呢? Ⅰ 引用类型(注意:Java中数组也是引用类型)的 “值传递" 首先,我们需要明确一点 Object object=new Object() 对于jvm来说它一共创建了两个对象 一个是在Java虚拟机栈里面的对象引用(即上述的object) 一个是在堆中创建的对象实例(即上述的Object) jvm创建完对象之后 将

qq_38012000的博客 362

如何理解Java中的引用传递和值传递?

如何理解Java中的引用传递和值传递? 想必,大家都或多或少的听过Java都是值传递这句话吧,那为什么呢? 首先,想要区分两者,必须得知道什么是引用传递,什么是值传递: 值传递(pass by value):是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递(pass by reference):是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。 参数在程序语言中又分为形参和实参: 形式参

steamsb的博客 799

java integer 值传递_画图理解Java Integer的“值传递”

文章大纲值传递 和 引用传递 的区别Integer.valueOf(num)画图分析Integer的赋值Synchronized感受值传递画图分析值传递-地址值先来看看下面这段 Java 代码, 单元测试能不能跑通呢?@Testpublic void demo() {Integer a = 888; // @1 Integer b = change1(a); // @2Assert.asse...

weixin_39768645的博客 726

如何理解Java只有值传递?

相信学习过C++和Java的同学肯定会在值传递和引用传递这两种传递方式上纠结一番,我之前也是傻傻分不清,今天就来说说它俩的区别。

Your_Boy_Tt的博客 733
上一篇: [已解决] BageView 在Android 5.0 之后出现了小红点显示在view 的后面的情况
下一篇: java 包装类的个人记录
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值