荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: cfans (亮亮), 信区: Java
标 题: [合集]结果是0还是1? why?
发信站: 荔园晨风BBS站 (2005年06月30日16:28:37 星期四), 站内信件
☆ 1 ──────────── 我是分割线 ─────────────────☆
发信人: crycz (打印刻录CD/DVD 业余编程), 信区: Java
标 题: 结果是0还是1? why?
时 间: 2005年06月03日11:49:24 星期五
int i = 0;
i = i ++;
System.out.println( i );
谁能说出质的原因?
☆ 2 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日12:09:09 星期五
所以应该是1吧~ 不知道对不对
这里赋值的时候i=0,可是赋值结束后i要自加
☆ 3 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日12:12:29 星期五
自加后的结果并没赋给左边的i
☆ 4 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日12:13:51 星期五
但是要求输出的时候是要输出i啊~自加以后i就等于1了啊
☆ 5 ──────────── 我是分割线 ─────────────────☆
发信人: Zeroto (斐菲), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日12:41:01 星期五
典型的二次赋值,第一次是把i本身赋予i,这时候i还是0.接着第二次就是i加一后再赋予i.
所以很明显输出结果是一.
不过这种格式的赋值在老的编译器里面可能会报错的.所以二次赋值不常见,也不推荐用.
☆ 6 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日12:44:48 星期五
~~~~~~~~
自加后没有赋值了吧?
☆ 7 ──────────── 我是分割线 ─────────────────☆
发信人: xhjx (Hibernate), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日12:45:22 星期五
java係0,c好似係1
☆ 8 ──────────── 我是分割线 ─────────────────☆
发信人: bach (时光倒转4年), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: Fri Jun 3 12:45:51 2005
为什么赋二次了呢?
☆ 9 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日12:47:13 星期五
恩,这倒有可能,不知道自增自减运算符在java里是怎么规定的
☆ 10 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日12:54:47 星期五
有甘嘎事?
我摞vc编绎也是0啊
☆ 11 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日12:56:16 星期五
你都知自加后没赋值
当然没会输出1。它
输出的是表达式的值
不是自加后的i值
☆ 12 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:01:03 星期五
system输出的表达式的值? i不是一个变量嘛?表达式怎么写输出的都是变量
i的值才对呀~
☆ 13 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:06:51 星期五
翻翻C语言的书,看看书上怎么说吧
我功力浅薄,不知怎么说了……
☆ 14 ──────────── 我是分割线 ─────────────────☆
发信人: crycz (打印刻录CD/DVD 业余编程), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:07:30 星期五
这么多人回贴中.这个正确点.但是没原因.当然了.我也不知道.
结果就是输出 0. 哪位高手能讲讲内在原因!谢谢了.
☆ 15 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:09:36 星期五
摘抄一句:
前缀++、--与后缀++、--的区别:
++i(前缀++)在使用i之前,使i的值加1,因此执行完++i后,整个表达式和
i的值均为i+1; i++(后缀++)在使用i之后,使i的值加1,因此执行完i++后,整
个表达式的值为i,而i的值变为i+1。
☆ 16 ──────────── 我是分割线 ─────────────────☆
发信人: xhjx (Hibernate), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:10:18 星期五
觉得vc会係1
我度冇装vc,去你公司睇睇,哈哈
☆ 17 ──────────── 我是分割线 ─────────────────☆
发信人: crycz (打印刻录CD/DVD 业余编程), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:11:46 星期五
要知道C和Java是有很多不同点的.
☆ 18 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:11:53 星期五
vc确实系0
呢个结果同编绎器实现都系有关系的,所以如果你用tc系1,我用vc系0都唔怪
☆ 19 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:12:40 星期五
这个基本操作是一样的
而且我摘抄这一句也来自java教程
☆ 20 ──────────── 我是分割线 ─────────────────☆
发信人: unique (花开四季 香飘八方), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:12:45 星期五
我用vc怎么是1的
☆ 21 ──────────── 我是分割线 ─────────────────☆
发信人: xhjx (Hibernate), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:13:33 星期五
java同c在处理语法上嘎机制唔同嘎
☆ 22 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:13:48 星期五
是呀,如果输出语句是这样的话:printf("%d",i++); 那样就是0
可是输出语句是在i++ 这样的语句以后才执行,这个时候i 已经自加了,也就是说
如果在printf("%d",i);后面再加多一句printf("%d",++i);的话第2次输出结果
就应该是2了
☆ 23 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:14:11 星期五
恩,所以想知道在java里面怎么定义自增自减的
☆ 24 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:17:32 星期五
你贴下你的程序?
☆ 25 ──────────── 我是分割线 ─────────────────☆
发信人: unique (花开四季 香飘八方), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:19:02 星期五
#include <stdio.h>
void main()
{ int i=0;
i=i++;
printf("%d\n",i);
}
你贴下你的程序?
☆ 26 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:19:54 星期五
你自己运行下看看就知道是不是2了……
☆ 27 ──────────── 我是分割线 ─────────────────☆
发信人: unique (花开四季 香飘八方), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:20:39 星期五
#include <stdio.h>
void main()
{ int i=0;
i=i++;
printf("%d\n",i); ---1
printf("%d\n",i++);---1
printf("%d\n",++i);---3
}
☆ 28 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:21:10 星期五
我只能说神奇
我的跟你的一样,不过输出的是0
我用vc6
☆ 29 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:22:26 星期五
我复制你的程序去运行,结果是0, 0, 2
☆ 30 ──────────── 我是分割线 ─────────────────☆
发信人: unique (花开四季 香飘八方), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:22:58 星期五
我在java里面结果是 0,0,2
☆ 31 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:23:41 星期五
我也是vc6,一样输出为1
☆ 32 ──────────── 我是分割线 ─────────────────☆
发信人: crycz (打印刻录CD/DVD 业余编程), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:23:50 星期五
难道系统平台问题?. 当然我更想知道的是java原因!
☆ 33 ──────────── 我是分割线 ─────────────────☆
发信人: xhjx (Hibernate), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:25:27 星期五
java係先产生一个内存空间存放初始值,等运算结束后再释放该内存空间
☆ 34 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:28:14 星期五
我的java书上写的++,--与C/C++类似
☆ 35 ──────────── 我是分割线 ─────────────────☆
发信人: xhjx (Hibernate), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:28:28 星期五
装了个vc,都係1,唔信上来睇
☆ 36 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:29:23 星期五
你落来睇
我度真系0!
系统2000
☆ 37 ──────────── 我是分割线 ─────────────────☆
发信人: xhjx (Hibernate), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:30:34 星期五
但係呢个係i=i++,你试试j=i++就知啦
☆ 38 ──────────── 我是分割线 ─────────────────☆
发信人: xhjx (Hibernate), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:31:02 星期五
你上次话你公司冇女嘎...........
☆ 39 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:32:28 星期五
shift
无叫你来睇女
☆ 40 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:32:48 星期五
应该说问题就出这里
在表达式中把i++赋值给了自己,然后又自加,所以输出为1
如果变量为j的话就是0
在 xhjx (Hibernate) 的大作中提到: 】
☆ 41 ──────────── 我是分割线 ─────────────────☆
发信人: crycz (打印刻录CD/DVD 业余编程), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:38:40 星期五
什么时候shit变成shift了??
☆ 42 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:39:32 星期五
java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始
的值而C的编译器不会这么做
所以说java跟c的结果是不一样的
☆ 43 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:41:02 星期五
shift比较文明
☆ 44 ──────────── 我是分割线 ─────────────────☆
发信人: xhjx (Hibernate), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:41:51 星期五
public class test
{
public static void main(String args[])
{
int i=0;
int j;
j = i++;
System.out.println("i="+i);
System.out.println("j="+j);
}
}
☆ 45 ──────────── 我是分割线 ─────────────────☆
发信人: xhjx (Hibernate), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:42:17 星期五
人家以为你英文差,虽然我更差
☆ 46 ──────────── 我是分割线 ─────────────────☆
发信人: kylt (潜心修炼), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日13:43:17 星期五
我依家英文确实系差,惊乜
不比当年了……
☆ 47 ──────────── 我是分割线 ─────────────────☆
发信人: cfans (亮亮), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日15:55:20 星期五
结果是0
不推荐用这些东西。
我怀疑有语法问题。
and,大家继续灌水。。hoho。。。
☆ 48 ──────────── 我是分割线 ─────────────────☆
发信人: cfans (亮亮), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日15:57:50 星期五
如果是
int i = 0;
i++;
System.out.println(i);
那么就是1
☆ 49 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日17:32:28 星期五
以后工作了要写出这种语句还不给人打死...
☆ 50 ──────────── 我是分割线 ─────────────────☆
发信人: Dicyson (快乐很难), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日17:44:50 星期五
结果是0 如果是++i 结果就是1。。。
至于为什么? 就要问编写高级语言的开发者!! 呵呵
前缀后缀的问题!
☆ 51 ──────────── 我是分割线 ─────────────────☆
发信人: crycz (打印刻录CD/DVD 业余编程), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日21:37:41 星期五
何出此言..多得探索一些东西才会学得多. 虽然不推荐这样写.
但目前好像还没有一人能说出原因.有不少人还说是1呢.
不要整天就光想着做大事(项目)..试问连这么基础的问题都
理解不透彻? 写代码能出神入化吗?
有人会认为我无聊.搞这样的问题来.见谅..但这样能提高本版的人气.何乐不为?
☆ 52 ──────────── 我是分割线 ─────────────────☆
发信人: cfans (亮亮), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日21:39:48 星期五
其实,这个问题真的有点太偏了。
而且我已经说了,i=i++这样的语法很奇怪。
欢迎讨论,不过最好还是不要转牛角尖。
谢谢。
☆ 53 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日22:57:21 星期五
哈哈,我又不是讲不能拿来大家讨论,而是讲写出这样的程序可读性大大降低,
以后团队合作不可能coding & debug全都你一个人做,所以程序要通俗易懂.
如果是几个爱好者聚在一起讨论也没什么不好的呀~
☆ 54 ──────────── 我是分割线 ─────────────────☆
发信人: sunlit (sunny), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: 2005年06月03日22:58:45 星期五
支持斑竹 ^_^
☆ 55 ──────────── 我是分割线 ─────────────────☆
发信人: vbiao (阿标), 信区: Java
标 题: Re: 结果是0还是1? why?
时 间: Sat Jun 4 10:04:37 2005
这里要注意的是 i++ 和 ++i 的区别,这并不是java特有的。
++i 的实质是 i 自增1, 整个表达式的值(即 i++这是个表达式,
和 x+y 一个意思,x+y也是一个表达式)为 i 增1后的值;
i++ 的实质是 i 自增1, 整个表达式的值为原来的 i 的值,
例如: i=1 ; j =i ++;则 上述语句的结果为 j=1,i=2。
就 i=i++而言,整个运算过程是这样的:首先赋值运算符=的优先级
比自增运算符++低,故先进行 i 的自增运算,i的值由原来的0变为1,
然后进行赋值运算,即 将表达式 i++的值赋给 i,i 的值就变成0了。
其实,只有在考试是才遇得到 i=i++这样的表达式,实际编程中常用
到的是 j=i++;它和 j=i;i++;这两个语句的功能是一样的, 这
样的代码看起来简洁一些,正如你喜欢写 i++而不写 i=i+1一样。
※ 修改:.vbiao 於 Jun 4 10:08:58 2005 修改本文.[FROM: 192.168.1.218]
☆ 56 ──────────── 我是分割线 ─────────────────☆
发信人: anguskwan (妈我想你~爸我也想你), 信区: Java
标 题: re: 结果是0还是1? 实质是什么?!!!
时 间: 2005年06月04日10:23:16 星期六
javap 一下编译过后的class看看~~
java的编译器在遇到i++和i--的时候会重新为变量运算分配一块内存空间,以存放原
始的值,而在完成了赋值运算之后,将这块内存释放掉,下面首先看一下如果是j=i++的情
况:首先编译器新开辟一块内存,将i的原始值存放在其中,最后这新开辟的内存中的值将
赋值给j,这样j=i++后,j就会得到i的值,而i又将自加,所以,在释放内存之后,原来存
放j和i的地方将得到值将是:j(此时的值等于初始i值)和i(i自加后的值)。但是如果
是i=i++.同样编译器先开辟一块新的内存,然后将这快新内存中的值赋给i(前面是赋给j
),而这快新的内存中保存的是i的原始值。也就是虽然旧内存中i自加了,但是新内存中
的是i的初始值(1);于是新内存中的值(1)把自己又赋给旧内存中的i;像这样循环下去
,实际上就是一个圈了。
( 打印刻录CD/DVD 业余编程) 的大作中提到: 】: int i = 0; : i = i ++;
☆ 57 ──────────── 我是分割线 ─────────────────☆
发信人: vbiao (阿标), 信区: Java
标 题: Re: re: 结果是0还是1? 实质是什么?!!!
时 间: Sat Jun 4 10:56:08 2005
精神可嘉,赞一个!
但这个问题并不是java的特有的,你说的是你所使用的java编译器是如何实现 i=i++这
个表达式的
运算的问题
※ 修改:.vbiao 於 Jun 4 10:58:55 2005 修改本文.[FROM: 192.168.1.218]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店