int a=10;System.out.println(a--);System.out.println(a);输出结果是什么
时间: 2024-02-22 18:55:09 浏览: 21
输出结果是:
```
10
9
```
第一行输出的是a的当前值10,然后a的值被减1。第二行输出的是a的新值9。
相关问题
public class VariableDemo { int a = 111; final int b = 222; public void display() { System.out.println("执行display()"); int a = 333; System.out.println(a); System.out.println(this.a); System.out.println(b); System.out.println(this.b); } public static void main(String[] args) { // TODO Auto-generated method stub int a = 444; System.out.println("执行main()"); System.out.println(a); //System.out.println(this.a); {// 代码块1 int c = 666; System.out.println(c); } System.out.println(c); {// 代码块2 int d = 666; System.out.println(d); } int d = 888; System.out.println(d); VariableDemo vd = new VariableDemo(); vd.display(); vd.b = 999; System.out.println(vd.b); } }
该代码存在以下问题:
1. 在`main`方法中,不能直接访问非静态变量`a`和`b`,因为它们是属于对象的,必须先创建一个类的实例才能访问。
2. `final`修饰的变量`b`不能被修改,所以在`vd.b = 999;`中会编译错误。
3. 在代码块1中定义的变量`c`只能在代码块内部访问,超出代码块范围后就不能再访问了。在`System.out.println(c);`处会编译错误。
4. 变量名`d`在代码块2和`main`方法中都出现了,这是不合法的,因为在同一级作用域中变量名不能重复。
修正后的代码如下:
```
public class VariableDemo {
int a = 111;
final int b = 222;
public void display() {
System.out.println("执行display()");
int a = 333;
System.out.println(a);
System.out.println(this.a);
System.out.println(b);
System.out.println(this.b);
}
public static void main(String[] args) {
int a = 444;
System.out.println("执行main()");
System.out.println(a);
{
int c = 666;
System.out.println(c);
}
// System.out.println(c); // 编译错误
{
int d = 666;
System.out.println(d);
}
int d = 888;
System.out.println(d);
VariableDemo vd = new VariableDemo();
vd.display();
// vd.b = 999; // 编译错误
System.out.println(vd.b);
}
}
```
修正后的代码中,将`vd.b = 999;`注释掉,因为`b`是用`final`修饰的,不能被修改。同时,变量名重复的问题也得到了修正。
int a = 10; int b = a++; int c = a++ + a++; int d = a++ + a++ + a++; int e = a++ + a++ + a++ + a++; int f = a++ + a++ + a++ + a++ + a++; System.out.println(b);//=10 System.out.println(c);//=23 System.out.println(d);//=42? System.out.println(e);//=70? System.out.println(f);//=110?
在这段代码中,变量a的初始值为10。我们逐行分析代码:
- `int b = a++;`:首先将变量a的值赋给变量b,然后再将a的值加1,此时a的值为11,b的值为10。
- `int c = a++ + a++;`:先计算表达式右边的值,a++的值为11,然后a再自增1变为12,a++的值为12,然后a再自增1变为13,将这两个值相加得到23,赋给变量c。
- `int d = a++ + a++ + a++;`:同样先计算表达式右边的值,a++的值为13,然后a再自增1变为14,a++的值为14,然后a再自增1变为15,a++的值为15,然后a再自增1变为16,将这三个值相加得到42,赋给变量d。
- `int e = a++ + a++ + a++ + a++;`:同上,a++的值为16,然后a自增1变为17,a++的值为17,然后a自增1变为18,a++的值为18,然后a自增1变为19,a++的值为19,将这四个值相加得到70,赋给变量e。
- `int f = a++ + a++ + a++ + a++ + a++;`:同上,a++的值为19,然后a自增1变为20,a++的值为20,然后a自增1变为21,a++的值为21,然后a自增1变为22,a++的值为22,然后a自增1变为23,a++的值为23,将这五个值相加得到110,赋给变量f。
因此,最终输出的结果为:
```
10
23
42
70
110
```