`

像指针一样 直接修改值(交换)

    博客分类:
  • java
 
阅读更多

由于java设计的原因,在语法层面不能实现,但是能通过AtomicReference类实现。

示例代码:

import java.util.concurrent.atomic.*;
public class HelloWorld{
    public static void f1(AtomicReference<Integer> a, AtomicReference<Integer> b){
        int t;
        t=a.get();
        a.set(b.get());
        b.set(t);
    }
    public static void main(String[] args) {
        AtomicReference<Integer> a=new AtomicReference<Integer>(1);
        AtomicReference<Integer> b=new AtomicReference<Integer>(2);
        System.out.println(a.get()+" "+b.get());
        f1(a,b);
        System.out.println(a.get()+" "+b.get());
    }
}

运行结果:

分享到:
评论

相关推荐

    C++“指针”学习建议

    - 第二个示例中,直接通过指针解引用进行值交换,`*p1`和`*p2`实际上代表了`a`和`b`,通过对指针解引用进行赋值操作,实现了`a`和`b`值的真实交换。 4. **指针作为函数参数**: - 函数参数可以是指针,这样函数...

    C语言函数的值调用、应用、指针、嵌套、递归

    这意味着函数内部不能直接修改传入的变量值,因为传递的是值的副本。例如,当你有一个函数`void increment(int num)`,调用`increment(5)`时,`num`在函数内部的任何改变都不会影响原始的5。这种调用方式确保了函数...

    C与指针第九章编程练习12-14,16题

    我们需要了解指针可以像整数一样进行加减运算,通过遍历数组,检查每个字符是否为空格,直到找到第一个非空格字符,返回对应的指针。 **编程练习16**:这个练习可能要求实现一个函数,该函数接收一个二维数组(实际...

    函数指针讲义

    函数原型`void swap(int *a, int *b)`可以有多种实现方式,例如使用指针交换值,或者直接通过指针解引用交换值。 ### 函数指针的应用 函数指针允许我们将函数作为参数传递给其他函数,或者作为返回值返回。例如,...

    C_C++指针经验总结

    - C++引入了引用,它像指针一样提供间接访问,但更安全,不能为NULL,且一旦初始化后不能改变。 - 引用更适合作为函数参数和返回值,因为它们具有更好的类型安全性和清晰性。 9. **指针与多态**: - 在C++的面向...

    C语言零基础最细致指针的讲解

    - 函数可以接收指针作为参数,这使得函数能直接修改实参的值,如`void swap(int *x, int *y)`可以交换两个整数的值。 8. **返回指针值的函数**: - 函数可以返回一个指针,比如动态分配内存的函数`int *newInt() ...

    第7章 快递员——指针1

    在函数参数传递中,指针可以作为参数,允许函数直接修改实参的值。例如,`void swap(int *a, int *b)`函数可以通过改变`a`和`b`指向的值来交换两个变量的值。 【指针与数组】 数组名实质上是数组首元素的地址,因此...

    彻彻底底搞定C/C++指针

    通过指针传递,可以在函数内部直接修改外部变量的值。 4. **函数参数传递方式之三:引用传递** C++中可以使用引用传递来实现类似于地址传递的效果。例如: ```cpp void swap(int &a, int &b) { int temp = a...

    c++将引用或者是指针作为函数参数实现实参的运算

    例如,下面的`swap`函数通过引用参数实现了两个变量的值交换: ```cpp void swap(int &a, int &b) { int temp; temp = a; a = b; b = temp; } ``` 在这个例子中,`a`和`b`是两个整数变量的引用,函数内部的...

    C、C++函数参数传递方式.pdf

    当`swap`函数接受两个整型引用`a`和`b`时,`i`和`j`的名字被直接传递给`a`和`b`,使得`a`和`b`可以像`i`和`j`一样直接使用。这样,对`a`和`b`的任何修改都会直接影响到`i`和`j`的值。 总结来说: - 值传递:形参是...

    关于C语言中参数的传值问题

    如果按照C++的规则,`Exchg2`函数会像地址传递一样交换`a`和`b`的值,其输出与考题二相同。 值传递、地址传递和引用传递(在C++中)各有其适用场景。值传递适合于不修改实参的情况,因为它创建了副本;地址传递则...

    深入探讨C++中的引用

    这样做既高效又直观,因为调用`swap(a, b)`时,`a`和`b`就像直接传递了它们的值一样,但实际上它们的值在函数内部被交换。 常引用,即`const`引用,进一步增强了引用的安全性和功能。常引用声明为`const 类型标识符...

    c++c语言入门基础教程教程10[借鉴].pdf

    同样,如果直接修改`ra`的值,`a`的值也会同步更新。 引用在函数参数传递中尤其有用。传统的函数参数传递方式是通过值传递,这实际上会创建一个局部副本,对副本的修改不会影响原始变量。而引用作为函数参数则允许...

    C语言函数参数传递的几个问题

    一个典型的例子是使用传址调用来实现两个整型变量的值交换,如`void swap(int *x, int *y)`。在这个函数中,`x`和`y`是形参,它们实际上是指向实参变量的指针。 #### 形参数组名与指针变量的一致性 数组名作为形参...

    C语言冒泡算法排序和链表中的应用

    冒泡排序是一种基础且经典的排序算法,其工作原理是通过不断地交换相邻的未排序元素,使得较大的元素逐渐“浮”到数组的顶端,就像水底的气泡一样慢慢升至水面。在C语言中实现冒泡排序,可以分为以下几个关键步骤: ...

    30天掌握c++精髓

    例如,通过交换指针所指向的数据来完成排序过程。 ##### 2. 指针的学习 - **示例一**:了解如何定义指针变量,并掌握如何通过指针变量访问其所指向的数据。 - **示例二**:进一步探索指针的高级用法,如指针数组和...

    C++ 引用的作用和用法

    与C语言中的值传递不同,引用传递允许函数直接修改实参变量的值,避免了拷贝数据带来的开销。例如,`swap`函数通过引用参数交换两个变量的值,这样在主调函数中调用`swap(a, b)`,函数内部对`p1`和`p2`的修改直接...

    冒泡排序和选择排序_C语言_冒泡排序_选择排序_

    链表的特性使得我们不能像数组那样直接通过下标访问元素,而是需要通过指针来遍历和修改节点。因此,实现链表排序时,我们需要额外处理节点的连接关系。 链表版冒泡排序会涉及到创建临时节点来保存中间结果,以便在...

    Windows API File Maping

    例如,如果你想写入数据,直接修改指针指向的内存即可;要读取数据,只需读取对应位置的内存值。由于内存映射文件是共享的,多个进程可以通过映射同一文件来实现数据交换。 4. **解除映射和关闭文件映射对象**:...

Global site tag (gtag.js) - Google Analytics