首页
学习
活动
专区
工具
TVP
发布
您找到你想要的搜索结果了吗?
是的
没有找到

【小家java】交换个变量数值的方法(四种方法)

前言 本文主要介绍Java中可以交换个变量的值的四种方法,可能开发者们在平时的coding中都有遇到过类似的情况,咋一看并不难。但本博文其实就是开开眼界而已,自己玩还行。...= temp; System.out.println("交换前 x=" + x + ",y=" + y); } 方式二:可以用个数求和然后相减的方式 缺点:如果 x 和...y 的数值过大的话,超出 int 的值会损失精度。...; //x = 20 System.out.println("交换前 x=" + x + ",y=" + y); } 方式三:利用位运算的方式进行数据的交换,思想原理是:一个数异或同一个数次...x=10,y=20 交换前 x=10,y=20 但是这里插一句,方式四,通过反射交换时,如果用Java8运行,就是上面的内容。

3.4K20

C++和Java中交换个整数的方法

一、C++交换个整数的4种方式 在C和C++交换个整数有多种方式,我想到的常用方法有以下4种: 1、使用引用传参 2、使用指针传参 3、利用位异或运算符^的特性,并结合引用传参 4、利用加减减运算符...,并结合引用传参 当然在C/C++以及Java中直接使用int作为形参进行值传递是无法交换个整数的,相关的C++测试代码如下: // swap1.cpp #include int...可以看出直接使用int作为形参传递是无法交换个整数的。...Java中交换个整数的值 Java中由于不存在引用传参和指针传参,交换个整数有以下种方法: 1、通过一个中间变量进行交换 2、使用位异或运算符 3、使用加减减的运算操作 1、使用中间变量交换个整数...但是在Java中使用上述种方法交换个整数,不太好封装成方法,这点可以通过数组传参来实现,这个可以参考我很早以前的一篇博客有关Java中个整数的交换问题

1.6K20

从JVM底层原理分析数值交换那些事

[20210203160207.png] 那同样来从字节码看,会发现确实有3个局部变量在局部变量表内,并且他们的数值都是int类型。...对象类型已经不是基础数据类型了,局部变量表里面的变量存的不是数值,而是对象的引用了。...b 里面记录的是 1002 ,去堆里面找地址为 1002 的对象,对象里面存了数值2。...[20210203163949.png] 而执行swapInteger(a,b)的时候,但是还没有交换的时候,相当于把 局部变量复制了一份: [20210203164756.png] 而交换之后,其实是...,栈帧里面存的是局部变量的数值交换的时候,个栈帧不会干扰,swap(a,b)执行完成退出栈帧后,main()的局部变量表还是以前的,所以不会变。

41060

从JVM底层原理分析数值交换那些事

那同样来从字节码看,会发现确实有3个局部变量在局部变量表内,并且他们的数值都是int类型。...对象类型已经不是基础数据类型了,局部变量表里面的变量存的不是数值,而是对象的引用了。...b 里面记录的是 1002 ,去堆里面找地址为 1002 的对象,对象里面存了数值2。...而执行swapInteger(a,b)的时候,但是还没有交换的时候,相当于把 局部变量复制了一份: 而交换之后,其实是SwapInteger(a,b)栈帧中的a里面存的地址引用变了,指向了b,但是...,栈帧里面存的是局部变量的数值交换的时候,个栈帧不会干扰,swap(a,b)执行完成退出栈帧后,main()的局部变量表还是以前的,所以不会变。

26930

交换链表中的节点

problem 给定一个链表,交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。...例如: 利用stack 我们利用一个 stack,然后不断迭代链表,每次取出个节点放入 stack 中,再从 stack 中拿出个节点。...拿出来的时候就是 2,1 个节点了。 再把这个节点串联起来,重复这个逻辑遍历完整个链表,就可以做到反转的效果了。...虽然用到了 stack,但因为只存了个元素,所以空间复杂度还是 O(1),时间复杂度是 O(n)。...//当前节点往前走步 cur = cur.next.next; //从stack中弹出个节点,然后用p节点指向新弹出的个节点

25410

反转还不行,要交换

交换链表中的节点 给定一个链表,交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 ? 思路 这道题目正常模拟就可以了。...接下来就是交换相邻个元素了,此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序 初始时,cur指向虚拟头结点,然后进行如下三步: ? 操作之后,链表如下: ?...对应的C++代码实现如下:(注释中详细和如上图中的三步做对应) class Solution { public: ListNode* swapPairs(ListNode* head) {...,准备下一轮交换 } return dummyHead->next; } }; 时间复杂度: 空间复杂度: 拓展 这里还是说一下,大家不必太在意力扣上执行用时...力扣上的统计如果份代码是 100ms 和 300ms的耗时,其实是需要注意的。 如果一个是 4ms 一个是 12ms,看上去好像是一个打败了80%,一个打败了20%,其实是没有差别的。

41020
领券