`

String 引用传递or值传递

阅读更多

//String是类  只要是类它的对象就是按引用传递的,但是String对象本身是不可变的,不可被修改

//但是可以修改指向该对象的引用啊,使该引用指向别的对象,不指向原来的对象

 

 

 

package com.wuxifu.test;

 

public class test

{

    String s2="abc";

    StringBuilder stringBuilder = new StringBuilder("bbb");

             public static void main(String[] args)

            {

                test test = new test();//该对象一创建就又两个成员变量  s2="abc"   stringBuilder = new StringBuilder("bbb")

                

                test.change(test.s2,test.stringBuilder);//由于s2  stringBuilder  都是类的实例化对象,所以是引用传递

                System.out.println(test.s2);//abc,注意通过上面一个方法不会改变该对象成员变量的引用

                System.out.println(test.stringBuilder);//bbbggg,注意通过上面一个方法不会改变该对象成员变量的引用

 

 

              test.change002(test.s2,test.stringBuilder);

               System.out.println(test.s2);//abc???    ,注意通过上面一个方法不会改变该对象成员变量的引用

                System.out.println(test.stringBuilder);//bbbgggggg  ,注意通过上面一个方法不会改变该对象成员变量的引用

            }

             public void change(String s2,StringBuilder stringBuilder)

             {

                // test.change(test.s2,test.stringBuilder)  调用了该方法,所以形参 s2 就是指向test.s2

               //形参stringBuilder就指向test.stringBuilder

             //变量名的引用相同,但他们还是不同的变量,不同的变量,其中任何一个可以随时指向别的对象,从而改变引用了

                 s2+="???";//s2是局部变量跟形参数一样,虽然得到了test.s2的引用,但是没用,局部变量形参就改变了引用指向别的对象  s2+"???"该对象()

                 stringBuilder.append("ggg");//stringBuilder是局部变量跟形参数一样,得到了test.stringBuilder的引用,和它指向同一个对象,形参对它指向的对象进行了修改,即对象本身被修改,所以test.stringBuilder得到对象内容就会改变

                 stringBuilder=new StringBuilder("GGGGGG");//stringBuilder是局部变量跟形参数一样,得到了test.stringBuilder的引用,和它指向同一个对象,但是又没用到,立即该形参就指向别的对象了

             }

 

 

 

         public void change002(String s,StringBuilder stringBuilder)

 

             {

 

                 

 

                 s2+="???";//对象的成员变量,非形参

 

                 stringBuilder.append("ggg");//形参修改指向对象的内容

 

                 stringBuilder=new StringBuilder("GGGGGG");//形参改变引用,指向别的对象,跟原来指向的对象断绝关系

 

             }

 

}

//形参如何改变某对象的成员变量的值呢,就是得到该成员变量指向对象的引用,通过引用传递而改变对象的内容,用的好没什么,用的不好就会误导自己,注意

 

分享到:
评论

相关推荐

    WebService CXF 对象传递 附

    <jaxws:endpoint id="myService" implementor="#myServiceImpl" address="/myService"> ``` 7. **客户端调用** CXF也提供了生成客户端代理类的工具,便于调用远程Web服务。客户端代码如下: ```java ...

    mybatis Mapper.xml中传参多选 字符串形式逗号分隔 AND中拼接OR.rar

    例如,如果用户选择的标签以逗号分隔的字符串"tag1,tag2,tag3"传入,我们可以在Java代码中将其分割并存入List<String>。 接下来,我们将焦点转到Mapper.xml文件。在SQL语句中,我们可以使用`<foreach>`标签来遍历...

    世界五百强java面试题下载

    ### Java面试题解析:传递引用的理解 #### 题目背景 在Java编程语言中,对象的传递方式一直是面试中的热点话题之一。本篇将基于一个具体的代码示例来探讨Java中对象引用传递的特点及其背后的原因。 #### 题目描述 ...

    xml to bean or bean to xml

    "xml to bean or bean to xml"这一主题涉及到如何将XML文档的数据映射到Java Bean对象上,以及如何将Bean对象的数据转换回XML格式。下面我们将详细探讨这两个过程。 1. XML到Bean转换: 这个过程通常称为XML的反...

    用C、C++、C#、JAVA做的一个相同的小程序(输出三个数种的最大值).docx

    然后,在`main`函数中,我们使用`scanf`函数读取三个整数,并将其传递给`max`函数,最后输出最大值。 C++语言实现 在C++语言中,我们可以使用函数模板来比较三个数的大小,并输出最大值。下面是一个简单的示例程序...

    PHP面试总结,知识结构大纲

    最后,文档提到函数的参数传递,包括值传递和引用传递的区别,以及函数的返回值。函数默认是通过值传递参数的,但使用引用传递`&`符号,可以让函数直接修改参数的值。函数可以通过`return`语句返回值,省略`return`...

    c#窗体传值方法总结

    当需要在窗体之间传递简单类型的数据,如字符串、整数或布尔值时,可以定义公共属性。例如,在源窗体中创建一个公共属性,然后在目标窗体中通过该属性获取或设置值。 ```csharp // 源窗体 public partial class ...

    将字符串转换为lambda表达式

    `lambda`函数通常用于需要一次性、短小的函数,比如作为参数传递给高阶函数,如`map()`、`filter()`或`reduce()`。 将字符串转换为`lambda`表达式主要涉及两个步骤:解析字符串和构建函数对象。这个过程通常需要...

    C# 传入自定义列表List 到Oracle存储过程

    在将C#的List传递给Oracle存储过程时,我们需要创建一个PL/SQL类型的数组,以便存储过程能够理解和处理C#列表中的元素。 1. **创建Oracle存储过程**: 在Oracle数据库中,创建一个接受数组作为参数的存储过程。...

    C# Winform窗口之间传值的多种方法浅析

    例如,当你需要从Form1向Form2传递一个字符串时,可以在Form2的构造函数中接收这个值。首先,修改Form2的构造函数,添加一个string类型的参数: ```csharp public Form2(String s) { InitializeComponent(); this...

    SignalNow:Azure无服务器信令和实时消息传递

    SignalNow:无服务器信令和实时消息传递SignalNow是使用和构建的实时信令服务。 SignalNow的主要功能: 无服务器。 借助Azure Functions和SignalR进行实时,轻松地扩展。 使用 , , 以及基于密钥的机制进行集成身份...

    ios-json解析与数据字典

    数据以键值对(key-value pairs)的形式存储,可以是对象(字典)、数组、数值、字符串、布尔值或null。在iOS中,我们可以使用内置的`NSJSONSerialization`类来解析和序列化JSON数据。 ### JSON解析步骤 1. **创建...

    史陶比尔VAL3学习资料

    - **按参考参数传递**:传递的是变量的引用,修改函数内的变量会影响原始变量。 ##### 2.6 时序控制指令 - **注释**:用于添加代码说明,不会被编译器解析。 - **call 子程序的调用**:调用预先定义好的子程序。 - ...

    Mybatis调用PostgreSQL存储过程实现数组入参传递

    String arrayStr = "{" + String.join(",", Arrays.stream(parameter).mapToObj(String::valueOf).toArray(String[]::new)) + "}"; ps.setString(i, arrayStr); } // 其他方法实现... } ``` 然后,在MyBatis的...

    vbnet入门学习资料

    - **参数传递**:了解值传递和引用传递的区别,以及如何向过程传递参数。 8. **类和对象**: - **面向对象编程(OOP)**:VB.NET支持类的创建,封装、继承和多态是OOP的三大特性。 - **共享成员**:类中的静态...

    java 对象默认序列化的干预方法

    例如,在分布式系统中,对象可能需要在网络节点间传输,此时就需要序列化来将对象转化为可以跨进程传递的形式。 总之,Java对象的序列化可以通过`transient`关键字来排除某些字段,同时可以利用`writeObject()`和`...

    测试用VB6源代码文本

    - 定义了一个名为`TiSiZiPD3`的过程,接受四个参数,其中两个参数按值传递(`ByVal`),另外两个参数按引用传递(`ByRef`)。 - `ByVal HeiBai As Integer`:黑色或白色标志。 - `ByRef X As Integer`:X坐标。 - `...

    2021-2022计算机二级等级考试试题及答案No.10912.docx

    8. Python中,函数参数传递是值传递,实参向形参传递数据是单向的,形参不能改变实参。位置参数按顺序匹配,而关键字参数则允许通过参数名指定值,可以跳过或改变参数顺序。 9. 该if语句中,i-1(7)不大于j(16)...

    json-schema-traverse:遍历 JSON Schema 将每个架构对象传递给回调

    json-schema-traverse 遍历 JSON Schema 将每个架构对象传递给回调安装 npm install json-schema-traverse用法 const traverse = require ( 'json-schema-traverse' ) ;const schema = { properties : { foo : { ...

    《编程与汇编》模拟考试题及答案(试卷九)(大学本科).pdf

    - 子程序参数传递方式包括寄存器传递、堆栈传递和内存传递,各有优缺点,如寄存器速度快但数量有限,堆栈稳定但效率略低。 - CALL指令调用子程序并保存返回地址,JMP指令直接跳转,CALL可以实现函数调用,JMP更适合...

Global site tag (gtag.js) - Google Analytics