inc.fermin(i); // java是传值的,参数i在方法里增加不会影响原来的i i = i++; //i++是先返回值然后再+1,++i于此正相反
我举个例子 1. int i=0; i++;//此时i为0,执行下一语句时i才改变 System.out.println(i);//此时i为1 2. int i=0; ++i;//此时i为1 System.out.println(i);//此时i为1
public class Inc{
public static void main(String argv[]){ Inc inc = new Inc(); int i =0; inc.fermin(i); //这句有没有都一样. i = i++; //I=0; System.out.println(i); } void fermin(int i){ i++; //局部变量I=0;执行下句时I=1; } }
首先VOID 无返回值,你写的函数要不要一杨,关键是 i = i++; // 先引用再赋值 个人见解
void fermin(int i) 这个函数没有用,改成这样的 public static void main(String argv[]){ int i =0; i++; System.out.println(i); }
public class Inc{
public static void main(String argv[]){ Inc inc = new Inc(); int i =0; inc.fermin(i);//因为java是值传递所以这句不改变i的值 i = i++;//这样赋值无效;改为:i++ System.out.println(i); } void fermin(int i){ i++; } }
/*** *输出结果是多少? */ public class Inc{
public static void main(String argv[]){ Inc inc = new Inc(); int i =0; inc.fermin(i);//传值,变量i本身值不变 i = i++;//分两步,首先i++,变量i的值变为1,但是表达式i++的值是i原来的值0; //第二步,将表达式i++的值0赋给变量i,这时变量i的值还是为0。 System.out.println(i);//理所当然输出的值是0咯 } void fermin(int i){ i++; } }
[java] public class Inc{ public static void main(String argv[]){ Inc inc = new Inc(); int i =0; inc.fermin(i); i = i++;//因为i为0,因此i++这个表达式也为0,虽然i已经加1了,但是经过赋值以后又变回了0. System.out.println(i); } void fermin(int i){ //因为i是简单类型(prime type)所以只传递值,而不会传递变量地址。 i++; } } [/java]
i++;
return i;
} i=inc.fermin(i);
i++; System.out.println(i);
Inc inc = new Inc();
int i =0;
//i = 0;
inc.fermin(i);
//i = 0; fermin 没有返回值
i = i++;
//先赋值 i = 0 ; 如果是 ++i 先加后赋值 i = 1;
System.out.println(i);
}
void fermin(int i){ //第二个 i , 字同范围不同
i++;
}
}
i = i++;// 先引用再赋值
i = ++i; // 先赋值再引用, 改下就知道了
int temp=i;i=i+1;i=temp;期待高手解答。
自学的,学的都不系统,一提就恍然大悟了;
是函数传参和++运算符的问题.
i = i++; //i++是先返回值然后再+1,++i于此正相反
1. int i=0;
i++;//此时i为0,执行下一语句时i才改变
System.out.println(i);//此时i为1
2. int i=0;
++i;//此时i为1
System.out.println(i);//此时i为1
public static void main(String argv[]){
Inc inc = new Inc();
int i =0;
inc.fermin(i); //这句有没有都一样.
i = i++; //I=0;
System.out.println(i);
}
void fermin(int i){
i++; //局部变量I=0;执行下句时I=1;
}
}
// 先引用再赋值 个人见解
这个函数没有用,改成这样的
public static void main(String argv[]){
int i =0;
i++;
System.out.println(i);
}
public static void main(String argv[]){
Inc inc = new Inc();
int i =0;
inc.fermin(i);//因为java是值传递所以这句不改变i的值
i = i++;//这样赋值无效;改为:i++
System.out.println(i);
}
void fermin(int i){
i++;
}
}
*输出结果是多少?
*/
public class Inc{
public static void main(String argv[]){
Inc inc = new Inc();
int i =0;
inc.fermin(i);//传值,变量i本身值不变
i = i++;//分两步,首先i++,变量i的值变为1,但是表达式i++的值是i原来的值0;
//第二步,将表达式i++的值0赋给变量i,这时变量i的值还是为0。
System.out.println(i);//理所当然输出的值是0咯
}
void fermin(int i){
i++;
}
}
其次i = i++,i++是先返回值然后再+1,++i于此正相反
i = i++ 相当于 temp=i ;i=temp ; temp =temp+1
再则,i++是等到下一个执行语句后,才能执行赋值。
被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的
方法中改变,但对象的引用是永远不会改变的。
i = i++ 在C中是未定义的情况,可以进行如下操作:
1) i++; i = i
2)temp = i; i++; i=temp
而Java明確規定了 i = i ++ 是進行第二种操作
看看这个帖子:http://topic.csdn.net/t/20060426/20/4716358.html
我哥说的java里面的一切传递都是引用的传递,我是用别人教我的堆栈来看值程序里面值的变化,你用这个试试.
i=i++ 是先把i赋值给i,然后++吧
void 和return i
矛盾了。
++优先级比=高
1.先计算i++
将i++看成一表达式,该表达式值为0,即i++值为0,而i=1
2.计算赋值
将表达式i++的值赋给i,即i=0
二、i++的问题‘
三、返回类型问题
这三个问题搞定,这题就搞定了。
LZ知道是怎么回事了吧。
public static void main(String argv[]){
Inc inc = new Inc();
int i =0;
//调用方法的时候由于. 传入的 值类型所以所以 改变只是一个副本. inc.fermin(i);
//所以调用之后 i 还是 0 // i++ 把 O 这个值付给了 i; i = i++;
//所以这时的i还是0
System.out.println(i);
}
void fermin(int i){
i++;
}
}
public class Inc{
public static void main(String argv[]){
Inc inc = new Inc();
int i =0;
//调用方法的时候由于传入的值类型,所以改变只是一个副本.
inc.fermin(i);
//所以调用之后i还是0 // i++ 把 O 这个值付给了 i;
i = i++;
//所以这时的i还是0
System.out.println(i);
}
int fermin(int i){
i++;
return i;
}
}
i=i++;
是先返回i的值后, i再加1。
也就是说
System.out.prinln(i); 中的i应该是加1之后的了。那就应该成1个了。小弟愚笨,大哥们,给疏通一下啊!
Inc inc = new Inc();
int i =0;
//i = 0;
inc.fermin(i);
//java 不会把fermin运算结果自动返回给i,所以i = 0;
i = i++;
//先赋值 i = 0 ; 如果是 ++i 先加后赋值 i = 1;
System.out.println(i);
}
void fermin(int i){ //第二个 i , 字同范围不同
i++;
}
} 给你举个例子你看看
public class LocalVariables { public static void main(String argv[]) {
LocalVariables lv = new LocalVariables();
int i = 0;
lv.fermin(i);
i = i++;
System.out.println("i= " + i);
System.out.println("lv.fermin(i)= " + lv.fermin(i));
} int fermin(int i) {
return ++i;
}
}
输出:
i= 0
lv.fermin(i)= 1
很正常啊100%为0
i++ 必须执行一次才会加1的!
inc.fermin(i); 进去就是0!
i是基本类型就算在fermin()方法中把i变成1了但是它不会指向main中的i,
i=i++也是必须执行一次后才会加1
然后println()所以是0;
public static void main(String argv[]){
Inc inc = new Inc();
int i =0;
inc.fermin(i);
i = i++; //先赋值,然后加1
System.out.println(i);
}
void fermin(int i){
i++; //这里面的对外面的i没有影响的,范围不同
}
}
temp = i++;
相当于
temp = i;
i = i+1;
而那个函数里面的i 是一个临时变量,不会影响i的值的
i是一个int基本数据,传给方法的是i的一个拷贝,i的拷贝在fermin(int i)方法中增值1了,i并没增值。看如下CODE:
void fermin(int i){
i++;
System.out.println(i); //值为1;
}
程序员在深圳QQ群大集 专业分类:
程序员在深圳JAVA群4247660
程序员在深圳c++群15195967
程序员在深圳.NET群Ⅱ:12203296
程序员在深圳TCP/IP协议栈开发:16956462
程序员在深圳JS & AJAX群:12578377
程序员在深圳英语学习群:23864353
深序员在深圳VB:11055959
程序员在深圳c++Ⅱ17409451
程序员在深圳c++群15195967
程序员在深圳嵌入式开发群37489763
程序员在深圳移动开发群31501597
程序员在深圳创业群33653422 不限专业分类:
高级群:17538442
第三群:2650485
第二群:7120862
第五群:29537639
第四群:28702746
第六群:10590618
第七群:10543585
第八群:12006492
第九群:19063074
第十群:2883885
第十一群:25460595
第十二群:9663807 深圳程序员QQ群联盟成立两年多,拥有三十个以上的QQ群,人数达两千多人,有30%以上的成员的经验丰富 的老手,包括国内外顶级大公司的成员(如微软、IBM,SUN,华为)、国内著名高校和研究院成员,和有 丰富实践经验的高级程序(包括参加过上亿元的项目的架构师),有很热爱技术的成员(包括自己写过嵌入 式操作系统),还有少数女程序员。 现推介如下QQ群,如有兴趣速速加入:深程高级群:17538442(此群不欢迎新手,已经在深圳工作的,月薪 6K以下的不欢迎)c++:15195967 .NET:12203296 mobile:31501597嵌入式:37489763 JAVA:4247660
——————————————————————————————————————————
希望大家不要认为群能给你送来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到 一点信息或许能带来一点启发。
有人说常聊QQ的人肯定技术不怎么样,但其实很多技术高朋友不需要做一些简单的重复劳动所以还是有 时间聊天的。 *****************************************************************************
void fermin(int i) // 这里既然是void 说明这个函数不会有返回值,可以直接忽略掉这个方法!接下来我们分析 i=i++; // 这个i++尤为重要, 先操作后赋值 也就是说先做了i=i的操作后再给i++,i=0 所以i=i i被赋值为0 然后0被输出。
public class Inc{ public static void main(String argv[]){
Inc inc = new Inc();
int i =0;
inc.fermin(i);
i = i++;//因为i为0,因此i++这个表达式也为0,虽然i已经加1了,但是经过赋值以后又变回了0.
System.out.println(i);
}
void fermin(int i){ //因为i是简单类型(prime type)所以只传递值,而不会传递变量地址。
i++;
}
}
[/java]