2 java lds java_lds 于 2014.07.28 22:57 提问

两个数交换,但不加入第三个数,对于这样的做法具体栈中是怎么一个顺序?

两个数交换,但不加入第三个数,对于

int num1 =1;

int num2 =2;

System.out.println("交换前---num1="+num1+" num2="+num2);

num2 = num1 +(num1 = num2)*0;
System.out.println("交换后---num1="+num1+" num2="+num2);

是怎么交换的??
num2 = num1 +(num1 = num2)*0;
对于这句语句,执行之后个人觉得是num1和num2都是2,可是执行结果却不是,这点没搞懂!谢谢

1个回答

pardream
pardream   2014.07.29 17:02

你到网上找java运算符优先级,看一下执行先后就能明白。

num2 = num1 +(num1 = num2)*0;

1.执行()中,num1=num2, num1 = num2; (此时不影响+左边的num1值)
2.执行(num1 = num2)*0 = 0
3.执行num1 + 0
4.执行num2= num1;
完成交换。

pardream
pardream 这与java编译算法有关,并且,这种做变量交换的做法不是通用的算法。至少C语言就不同。
接近 4 年之前 回复
code_life_
code_life_ 执行(num1 = num2)后num1的引用不就指向2了吗?后面再次用到num1时怎么会还是1?
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
[c]不用第三个数,去交换二个数的位置。
int a = 10; int b = 20; 第一种方法: a = a + b; b = a - b; a = a - b; 第二种方法: a = a ^ b; b = a ^ b; a = a ^ b; 第三种方法 a = (a + b) - (b = a);
Java中不使用第三个数交换两个数!
不使用第三个数交换两个数。
交换两个数(不引入第三个变量)
 前几天去面试,结果碰到这道题目,还着实给没想到,以前也见过这道题目,但那时就是想不起来,难道真是脑子不够用了。 后来回来查了一下,觉得这道题目虽然简单,但有时碰到真的就傻眼了。 所以写下来。public class Test { public static void main(String[] args) { // TODO Auto-generated metho
不借助第三个变量实现两个数的交换
假设两个数为和y,类型相同。 方法1,算术运算(加减): x=x+y; //x暂存两数之和,当两数符相同时可能出现溢出的情况,后面有改进方法 y=x-y; //y为两数之和减去y,即原来的x x=x-y; //x为两数之和减去现在的y(原来的x),变成原来的y 方法2,逻辑运算(异或):
算法--实现两个数互换(不引入第三方变量)
m = 3 n = 8 现在是想m与n互换;1、我们一般想到的就是引入第三方变量。 temp = m; m = n; n =temp; 这是比较常见的,但是现在我们不希望引入第三方变量,怎么做呢?2、 int m = 8, n=3; n = n+m = 11 m = n - m = 3; n = n-m = 8;
解第一个数是1,第二个数是1,第三个数是前两个数之和,求第n个数的值。
斐波那契数列指的是这样一个数列 0,1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368 public class de3 { public static void main(String[] args) { // TODO
Java快速交换两个数的值
1:通过使用异或运算,可以快速将两个数的值交换:原理如下:     我们知道异或是相同取0相反取1,如:0101异或1101的结果是1000。如对两个数,经过三次进行异或运行后的结果是这两个数的值互换。如 a =       0101, b=1101,则进行的操作如下:            第一次异或运算: a = a ^b = 1000            第二次异或运算: b = a
不用借助第三个数,直接交换两个数
mSystemTop = mSystemLeft + mSystemTop; mSystemLeft = mSystemTop - mSystemLeft; mSystemTop = mSystemTop - mSystemLeft;
C++将两个整数交换次序后输出
问题描述:将两个整数交换次序后输出  #include using namespace std; void  swap (int &a,int &b) {     int t=a;     a=b;     b=t; } int main() {     int x=5,y=10;     cout     swap(x,y);     cout     r
Linux-C基础知识学习:C语言作业-输入两个数,将两个数交换,按升序输出。
Linux基础知识学习 C语言作业:输入两个数,利用函数、指针,排序后,按升序输出。#include <stdio.h> void swap(int *x,int *y){ //利用指针,直接根据内存地址,对内存空间进行操作! int temp; temp = *x; *x = *y; *y = temp; } main(){ int a,b; printf("输入两个数:");scanf("%d