首页 > 试题广场 >

最后打印出来的结果是什么?

[单选题]
有如下一段程序:
public class Test{ 
    private static int i=1;
    public int getNext(){ 
         return i++;
    } 
    public static void main(String [] args){ 
        Test test=new Test(); 
        Test testObject=new Test(); 
        test.getNext(); 
        testObject.getNext(); 
        System.out.println(testObject.getNext()); 
    } 
}
请问最后打印出来的是什么?()
  • 2
  • 3
  • 4
  • 5
return i++; i++是先返回,后++
发表于 2017-04-18 08:31:38 回复(0)
更多回答
推荐
return i++, 先返回i,然后i+1;
第一次调用getNext()方法时,返回的是1,但此时i=2;
第二次调用 getNext()方法时,返回的是2,但此时i=3;
第三次调用 getNext()方法时,返回的是3,但此时i=4;
编辑于 2015-12-16 14:30:32 回复(23)
该题主要考察的是static属性和i++操作。
因为i是static的,是类属性,所以不管有多少对象,都共用的一个变量。这里getNext()方法被调用了三次,所以进行了三次i++操作。
但是由于getNext()操作的返回是:return i++; i++是先返回,后++,所以在println是,已经返回了i(此时i为3),再进行自增的,所以这里结果为3
发表于 2016-04-03 14:51:48 回复(8)
第一个不对啊, 这道题很简单啊  两个实例对象, 分别调用了相同的变量,而i开始等于1   不同对象之间又不打扰,这里说的是 object变量 这个对象
第一次得到了一个 getnext  这会i就是2    在输出的时候 又调用了一次 ,结果就是3嘛
答案是B
发表于 2016-06-21 18:20:58 回复(1)
错误原因在于:读程序不仔细,没有看到该变量为静态变量
发表于 2015-10-07 23:31:56 回复(0)
  • return i++ 比较特殊,先是return i;然后i++。
  • return i=i+ 1 不同,它是先让i=i+1,再return。
发表于 2015-12-26 17:20:51 回复(2)

++i与i++运行结果对比
发表于 2016-04-01 21:41:02 回复(3)
答案错了吧,我运行的结果为3。
由于static变量只会创建一份,所以不管创建几个对象,其中的static变量的值都为1。
调用三次getnext理论上来讲最后打印的应该是4,但是要注意返回的是i++,个人觉得就应该返回3,再对 i++。
可以把下面这段替换掉原来的执行一下就可以看出来了。
System.out.println(i); test.getNext(); System.out.println(i); testObject.getNext(); System.out.println(i); System.out.println(testObject.getNext()); System.out.println(i);
发表于 2015-09-16 16:42:57 回复(7)
static 静态属性为所有对象共用!
发表于 2016-10-22 15:04:37 回复(1)
先return i,然后i再++,orz.
发表于 2015-09-17 00:26:35 回复(0)
把i的static去掉后输出是2,加上static后输出是3,两个对比可能会更明白一些,类变量与实例变量与++会理解更深一些。
发表于 2015-12-15 16:58:11 回复(1)
privatestaticinti=1;静态变量i=1


returni++;  i++,返回的是未操作前的i


发表于 2015-10-07 17:44:51 回复(2)
本题主要考察了i++是先返回值后自加1的知识点.
第一次调用后先返回i再进行计算,计算后i值为2;
第二次调用后先返回i再进行计算,计算后i值为2+1=3;
第三次调用后先返回3(答案),再进行计算3+1=4 ;
发表于 2019-02-20 09:49:14 回复(0)
getNext方法应该是static
发表于 2017-10-02 18:05:25 回复(0)
package model;

public class Test8{
    private static int i=1;
    public int getNext(){
         return i++;
    }
    public static void main(String [] args){
        Test8 test=new Test8();
        Test8 testObject=new Test8();
        test.getNext();//1  i变成2
        testObject.getNext();//2 i变成3 
        System.out.println(testObject.getNext());//3 i变成4
    }
}

发表于 2017-09-17 16:58:23 回复(0)
注意点一:先return i 再进行++操作  
注意点二:test.getNext();
        testObject.getNext();
        System.out.println(testObject.getNext());
此部分程序是调用了三次getNext()方法
稍加改造后输出:
        int b = test.getNext(); //第一次调用 b=1,++后i=2
        System.out.println(b);
        System.out.println(test.getNext()); //第二次调用 输出为2 ++后i = 3
        int c = testObject.getNext(); //第三次调用 c=3  ++后i = 4
        System.out.println(c);
        System.out.println(testObject.getNext()); //第四次调用 输出为4
这里调用了四次getNext()方法
输出结果为:1,2,3,4
发表于 2015-09-30 09:20:26 回复(0)
答案有误吧。。i为静态变量执行三次++操作之后为4,但题目中打印的是第三次调用函数的返回值,此前两次调用完之后i的值是3,第三次调用时返回3之后i再自增吧。。然后将代码帖eclipse中运行结果为3.。不知道哪位大手讲讲如何得出4的。。
发表于 2015-09-16 16:42:48 回复(1)
static无论new了多少变量都公用一个变量i,调用了两次 值变成3,最后一次调用的时候先return i i再加1 所以值后变得没有打印出来

发表于 2019-03-02 21:05:16 回复(0)
return i++;
return ++i;
两者是不一样的。
前者返回i,然后i = i+1;
后者直接范围 i+1;
发表于 2017-02-23 21:55:50 回复(0)
发表于 2017-01-06 12:03:40 回复(0)
答案:3
a = i++ 是先将 i 赋值给 a,然后 i 再自增;
a = ++ii 先自增,再讲自增后的结果赋值给 a
发表于 2015-09-29 16:51:45 回复(0)
static创建的是一个空间,不管是test还是testobjct调用操作的都是一个空间。test调用变2,objct再调用变3
发表于 2022-09-10 10:58:59 回复(0)