`
Michael.solofly
  • 浏览: 59358 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

指针!!指针!!第一次在Java中感受到指针!!

阅读更多
第一次在Java中感受到指针
可能很多人认为我大惊小怪,可是确实比较激动。
于是发上来分享。
这是我感受到指针的代码。
  public List search( List<String> organizationIds) throws Exception {
    try {
      begin();
      List<String> orgList = organizationIds;
        for (int i = 0; i < organizationIds.size(); i++) {
          List<String> list = DAO.get(organizationIds.get(i));
          for (String str:list) {
            orgList.add(str);
          }
      }
      commit();
      return usersDatas;
    } catch (Exception e) {
      rollback();
      log.error(e.getMessage(), e);
      throw e;
    }
  }

我把参数中organizationIds这个list赋值给了orgList
我的原意是想把organizationIds的值给orgList
然后后面用orgList去进行操作。
可是我发现。我这样的做法。导致我的程序变成了死循环。
从逻辑代码没看出有什么问题。
于是使用断点功能去追查。
最后发现。每次当我orgList进行add的时候
organizationIds的值也会一起变化。
这是什么情况?以前没遇到过啊。以为是代码没有编译
于是费了很大的力气进行编译……
编译的结果。还是跟之前一样。代码反复的查验。。无果。。

忽然反映过来。 难道是指针???
我的orgList没有进行一次 new操作。所以没有给他开辟一个内存空间。
当把organizationIds赋值给orgList的时候。
只是把orgList的指针指向了organizationIds的内存地址????
于是把代码改为如下:
  public List search( List<String> organizationIds) throws Exception {
    try {
      begin();
      List<String> orgList = new ArrayList<String>();
        for (int i = 0; i < organizationIds.size(); i++) {
          orgList.add(organizationIds.get(i));
          List<String> list = DAO.get(organizationIds.get(i));
          for (String str:list) {
            orgList.add(str);
          }
      }
      commit();
      return usersDatas;
    } catch (Exception e) {
      rollback();
      log.error(e.getMessage(), e);
      throw e;
    }
  }


果然这一次没有问题了。并且orgLIst的值完全正确……

其实Java也是一样。还是有指针的嘛…………
0
3
分享到:
评论
8 楼 wenxiang_tune 2010-12-01  
呵呵,有意思的讨论,MS楼主是有道理的
7 楼 youjianbo_han_87 2010-11-29  
mqlfly2008 写道
不过是对象间地址的值传递而已


哈哈。楼主多想了。。。。
6 楼 jilen 2010-11-25  
C语言指针可以随意的指向任何内存,可以参与计算,java里则不是这样,String s="abc"+"d";这样的显然不是地址运算。

C语言指针指向内存需要自己管理,Java中如果引用不可达则成为垃圾,虚拟机会在适当时候回收。

虽然这帖子看起来很新手。但不难看出作者突然领悟的那种感觉,我想这种感觉是很重要的。
5 楼 numen_wlm 2010-11-25  
唉,这孩子。。。
4 楼 hu437 2010-11-25  
这还真不算是指针
3 楼 beautyOfProgram 2010-11-25  
试试这个

   public void swap(int a, int b){
          int c = a;
          a = b;
          b = c;
   } 
  外面看看 a,b 的值

  public void swap ( Integer a ,Integer b){

     Integer c = a;
      a = b;
      b = c;
 }
  外面看看 a,b 的值



再用C的指针写试试
2 楼 Michael.solofly 2010-11-25  
mqlfly2008 写道
不过是对象间地址的值传递而已

并不是地址传递
而是公用一个内存地址。
这不就是指针么?
1 楼 mqlfly2008 2010-11-25  
不过是对象间地址的值传递而已

相关推荐

    详细分析指针的运作!判断指针使用的错误,越界!引用错误!指针数据流分析。分析静态数据相关性,java实现!

    在IT行业中,指针是C/C++编程语言中的核心概念之一,它允许程序直接操作内存地址,从而提供了高效且灵活的数据处理方式。然而,指针的使用也常常伴随着潜在的问题,如指针越界、引用错误等。这篇分析将深入探讨指针...

    C++指针资料 集合!!

    在C++编程语言中,指针是一个至关重要的概念,它为程序员提供了对内存直接操作的能力,使得代码更加灵活和高效。这份"**C++指针资料集合**"显然是一个宝贵的资源,包含了关于C++指针的多种学习材料,旨在帮助程序员...

    java_指针_数组的

    根据提供的文件信息,我们可以从标题、描述以及部分代码中提炼出关于Java中数组与指针相关的知识点。需要注意的是,Java并没有传统意义上的指针概念,但可以通过数组和其他特性来模拟类似的功能。下面将对这些知识点...

    JNA 转java接口以及指针结构体解析

    在"JNA 转java接口以及指针结构体解析"这个主题中,我们将深入探讨如何使用JNA来处理C语言中的结构体和指针。 首先,理解JNA的基本工作原理至关重要。JNA通过定义一个`Interface`,该接口中的方法对应于要调用的...

    C#中使用指针源程序,我想许多C程序员不愿意学习Java的原因之一就是Java不支持指针

    C#中使用指针源程序,我想许多C程序员不愿意学习Java的原因就是Java不支持指针,但是现在类似于Java的C#却已经支持了指针,你可以使用unsafe关键字来告诉编译器下面的函数或者代码是不安全的。一旦你使用了unsafe,...

    Java实现带指针的时钟

    在Java编程语言中,创建一个带有指针的时钟是一个典型的图形用户界面(GUI)编程任务,这通常涉及到Swing或JavaFX库。这个项目"Java实现带指针的时钟"显然使用了Java的GUI功能来模拟一个圆形时钟,并且能够同步显示...

    彻底搞定C指针!!推荐

    在C语言中,指针是极其重要且强大的概念,它允许程序员直接操作内存地址,从而实现灵活的数据操作和高效的数据结构。要彻底掌握C指针,首先要理解变量的内存实质,因为指针与变量的存储位置密切相关。 1. 变量的...

    网络最火【水晶】鼠标指针!

    1.下载后到那个装鼠标指针的文件夹(就是你把指针装在哪个文件夹里) 2.打开压缩包,选种某个鼠标指针的图案,然后点【解压缩到】(在解压缩操作界面的左上角). 3.解压缩到你自己喜欢的文件夹里. 4.然后再打开...

    彻底理解指针,指针数组和数组指针,指针函数和函数指针

    在计算机编程中,指针是一个非常重要的概念,尤其是在C/C++这样的语言中更是如此。简单来说,指针是一种变量,但它存储的不是普通的数据类型(如整数、字符等),而是存储了一个内存地址。通过这个内存地址,我们...

    java空指针

    在Java编程中,空指针异常(`java.lang.NullPointerException`)是最常见的运行时异常之一,尤其在大型项目和复杂代码逻辑中更为常见。这种异常通常发生在试图访问一个尚未被实例化或已被设置为`null`的对象的属性或...

    200款鼠标指针库-鼠标指针设置-鼠标指针方案.zip

    这些个性化的指针可能有各种各样的主题,如卡通人物、动物形象、电影元素等,使用户在使用电脑时能感受到与众不同的视觉效果。 "鼠标指针方案"则是一系列配套的指针样式,包括不同操作状态下的指针,如待机、繁忙、...

    彻底搞定C指针-指向另一指针的指针

    在本系列第二篇中,我们对指针的实质进行了阐述。今天我们将学习一个新的指针概念:指向另一指针的指针。让我们先回顾一下指针的概念吧!当我们程序如下申明变量: short int i; char a; short int * pi; 程序会在...

    Java中的空指针异常问题.doc

    Java中的空指针异常问题是Java编程中常见的问题之一。当一个对象不存在时调用其方法或访问其字段时就会产生空指针异常。这种异常的主要原因是对象不存在或字段不存在。下面是空指针异常产生的几种情况: 1. 当一个...

    C语言 指针的详解与应用-理论结合实践,真正理解指针!

    [C语言] 指针的详解与应用-理论结合实践,真正理解指针!

    指针 指针教程 指针练习

    指针是C/C++编程语言中的核心概念,它在程序设计中扮演着至关重要的角色。指针是一个变量,其存储的是内存地址,该地址指向另一个变量。理解并熟练使用指针,是提升编程技能的关键步骤。 一、指针的基础概念 1. ...

    函数参数的传递问题(一级指针和二级指针)

    当函数调用时,一级指针的值被复制到了函数的栈中,而二级指针的值则是指向原始变量的引用。 在示例 7-4-1 中,GetMemory 函数的参数是 char *p,一级指针。在函数中,p 的值被改变,但是在 Test 函数中,str 的值...

    Java指针分析综述.pdf

    在 Java 指针分析技术中,还有一个重要的概念,即非全程序指针分析。非全程序指针分析是指在分析过程中,不需要对整个程序进行分析,而是只对特定的程序部分进行分析。这可以大大提高分析的效率和可靠性。 选择性上...

    C语言中的指针学习 C语言中的指针学习

    在C语言中,指针是理解程序运行机制和优化代码的关键概念之一。通过掌握指针,程序员能够更灵活地操作内存、实现复杂的数据结构,并提高程序的效率。下面,我们将深入探讨C语言中的指针概念及其应用。 ### 基础指针...

    C语言中的指针与指针变量的正确理解

    我这不是我第一次写关于C指针的文章了,只是因为指针对于C来说太重要,而且随着自己编程经历越多,对指针的理解越多,因此有了本文。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及...

    C指针 C指针C指针C指针C指针C指针

    C指针是C语言中的核心概念,它是编程中不可或缺的一部分,尤其对于理解内存管理和程序设计的底层机制至关重要。本文将深入探讨C指针的基本概念、使用方法及其在程序设计中的重要性。 首先,理解C指针的基本定义是...

Global site tag (gtag.js) - Google Analytics