`

List 传参 引用 赋值null

    博客分类:
  • java
阅读更多
public class TestThread {
public void test(){
List list = new ArrayList();
TestThread tt = new TestThread();
tt.test2(list);
System.out.println("test2调用后"+list.size());
   
tt.test3(list);
    System.out.println("test3调用后"+list.size());
}
   
public void test2(List list){
    //list =null;
    list=new ArrayList();
    list.add("test2的值1");
    list.add("test2的值2");
}
         public void test3(List list){
    if(list!=null){
    list.add("你好,我还是来了");
    }
}
}
这是个关于栈内存和堆内存的问题
List list = new ArrayList();
这句执行完以后实际在栈内存中产生一个list变量,在堆内存中产生一个ArrayList的对象,list变量的值实际上是堆内存Arraylist的地址,Java中虽然没有指针的概念,这个叫引用,为了便于理解也可以想象成list指向ArrayList

在程序执行了test2(list);之后,实际上在栈内存中又产生了一个新的变量,该变量是传入参数list的复制,这时候你可以理解成在栈内存中存在两个变量,一个是main方法中定义的list变量,一个是test2方法中定义的list变量的复制,两个变量都指向堆内存中存在的ArrayList对象, 然后在tese2()方法中你执行 list=null;实际上只是改变了在test2中生成的list变量复制的值,list变量的值实际上并没有发生改变,这样解释不知道对你有没有帮助
分享到:
评论

相关推荐

    浅谈C#中ListT对象的深度拷贝问题

    一、List对象中的T是值类型的情况(int 类型等)...1、对于引用类型的List无法用以上方法进行复制,只会复制List中对象的引用,可以用以下扩展方法复制: static class Extensions { public static IList<T> Clone(t

    spring mvc拦截器过滤json中的null值

    在Spring MVC框架中,我们经常需要处理JSON数据,这些数据可能包含null值。在某些情况下,为了保持数据的整洁和避免后端处理null值时出现异常,我们需要在数据传输前过滤掉这些null值。本教程将详细介绍如何使用...

    python-引用传参.docx

    当我们调用这个函数并将`my_list`传递给它时,实际上传递的是`my_list`引用的对象,而不是`my_list`的副本。因此,函数内部对`list`的修改会影响`my_list`,因为它们都指向同一个列表。最终输出的`my_list`是`[1, 2,...

    深入Java关键字null

    - **List**:允许重复元素,并且可以添加任意数量的`null`元素。 - **Set**:不允许重复元素,因此只能包含一个`null`元素(如果允许的话)。 - **Map**:键(`key`)最多只能包含一个`null`元素,而值(`value`)则可以...

    spring,cxf,restful发布webservice传递List,Map,List<Map>

    本文将深入探讨如何使用这些技术来发布Web服务,特别是涉及复杂对象如List、Map及List的传递。 首先,Spring框架是一个Java企业级应用开发的强大工具,它提供了众多模块,包括Spring MVC用于Web开发。在Spring框架...

    父类赋值给子类

    在编程领域,特别是面向对象编程中,"父类赋值给子类" 是一个常见的操作。C# 作为一种强大的面向对象的语言,提供了多种方式来实现这种继承关系下的数据复制。这里我们将深入探讨如何在 C# 中进行父类属性到子类属性...

    C#两个相同属性的类赋值方法

    最近有遇到两个类之间的赋值问题,两个类的属性几乎都一样的,所以写了个通过反射获取属性的然后赋值的方法,把一个类的属性的值赋值给另一个类。 框架是.net 4.5 public static D Mapper(S s) { D d = Activator...

    基于Python List的赋值方法

    在python中,对象的赋值就是简单的对象引用,这点和C++不同。如下: a = [1,2,3,hello,[python,C++]] b = a print a==b #True 这种情况下,b和a是一样的,他们指向同一片内存,b不过是a的别名,是引用。我们可以...

    Java中有关Null的9件事Java开发Java经验技巧

    你可以将一个引用类型的变量赋值为`null`,表示该变量当前不引用任何对象。例如:`String str = null;` 3. **空指针异常(NullPointerException)**: 当试图访问或操作一个`null`引用的对象时,会抛出`...

    C# MVC api-接收List实体类参数

    C# MVC ajax调用api接口,api接口以List的形式接收参数,以实现多条记录的操作,以VS2013打开,ASP.NET MVC 4,下载解压rar-demo直接打开运行即可。压缩文件里也包含了“IHttpActionResult不识别解决办法”的文档以...

    改变赋值的小程序

    在编程世界中,"改变赋值的小程序"指的是编写一种能够灵活调整变量赋值位置的代码片段或工具,这对于开发者来说确实能大大提高工作效率。赋值操作是编程中最基础且频繁的操作之一,理解如何高效地使用它对于提升代码...

    python基础入门教程:传参是传值还是传引用.pdf

    由于`c`和`list`引用的是同一对象,`append`方法改变了对象的内容,但未改变对象本身,所以外部的`list`也反映了这种变化。 然而,在例2中,当函数`test2`接收到字符串`str`作为参数`p`时,我们尝试将`p`指向一个新...

    C#实现下拉框绑定list集合的方法

    但无论数据源如何变化,基本的绑定步骤和原理保持不变:创建一个数据对象列表,设置控件的`DisplayMember`和`ValueMember`,然后将列表赋值给控件的`DataSource`属性。 通过以上介绍,你应该对C#中如何实现下拉框...

    C#数据实体类中如何给属性赋值

    List<Class1> cs = new List(); // 遍历数据集中的每一行 foreach (DataRow dr1 in ds.Tables[0].Rows) { Class1 c = new Class1(); // 遍历每一列 foreach (DataColumn dc in dr1.Table.Columns) { // 获取...

    list.size()==0与list==null、emptyList

    list.size()与list==null的区别 两者的区别是显而易见的,下面这两段就能显示两者差别: List list1 = new ArrayList(); System.out.println(list1.size());//0 List list2 = null; System.out.println(list2.size()...

    Java将2个List集合合并到一个List里面并排序工具类

    Java将2个List集合合并到一个List里面并排序工具类 1、Java编程资源,定义了一个名为`ListMerger`的工具类,主要包含一个名为`mergeAndSortLists`的静态方法。此方法用于将两个已经根据时间顺序排列的List合并成一...

    c#list添加数据

    如果等于0,表示没有找到满足条件的数据,此时返回null。这个判断确保了在没有数据的情况下不会尝试添加元素到空列表。 在注释掉的`for`循环中,我们可以看到原本计划在循环中逐个添加元素的逻辑。虽然这部分代码未...

    js 对象、数组赋值不指定路径(简洁写法).pdf

    这是因为在JavaScript中,对象和数组是引用类型,它们在内存中分配的位置是固定的,赋值实际上是复制了对这个内存位置的引用,而不是创建新的副本。因此,当对一个对象或数组进行修改时,会影响到所有引用该内存位置...

    jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签

    标题中提到的“jQuery ajax请求返回list数据动态生成input标签, 并把list数据赋值到input标签”涉及到多个知识点。首先,我们来探讨jQuery和ajax请求的基础概念,然后详细了解如何使用ajax请求从服务器获取数据,并...

    DataSet 转化为List的通用方法

    4. **值赋值**:将转换后的值赋给`T`的相应属性。 5. **列表填充**:将填充好的实例添加到`List<T>`中。 #### 三、特定列的快速转换 除了上述通用转换,还有一种适用于只关心`DataSet`中某单一列的情况。代码示例...

Global site tag (gtag.js) - Google Analytics