JAVA a 和b的问题

如下程序:
public class HelloJava{
public static void main(String[] args){
byte a=4,b=++a;
System.out.println(a);
System.out.println( b);
}
}
输出结果为a=5,b=5 .我以为输出结果为a=4,b=5.又没有循环,为什么++会给a+1呢?
求指教..
我知道程序的意思,只是不理解程序不是一步步执行的吗?还是不怎么明白,应该是优先级的问题.

关键就是在执行b=++a的时候,++a的话是a自己先完成+1,然后它的值赋给了b。
再者楼主可以写个别的例子测试下,修改下上面的代码
public class HelloJava{
public static void main(String[] args){
byte a=4;
++a;b=a;
System.out.println(a);
System.out.println( b);
}
}
这个也是java的底层设计有关系了,越是基础底层的东西就比较难理解了哈,或者说是一种规定吧。
像你执行一个循环也是一样的。
for(int i = 0; i < 10; i ++)
{
System.out.println(i);
}
循环体中也是没有出现i+1的情况,i还是在变动的,循环体执行十次就停止了哈。
要是你将你自己的代码修改成b=a++
结果就是a:5,b:4(先把a赋给b,然后a自己加1)
你也可以了解下运算符与其优先级。
希望对你有帮助哈。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-14
只要记得一句话,++a,加完之后自身+1
所以b = ++a;
1)++a; ---> a= 5;
2) b = a;
所以a和b都是5
第2个回答  2011-07-13
一、 b = ++a
运算过程:
第一步计算:a = a + 1;
第二部计算:b = a;
二、 b = a++
运算过程:
第一步计算:b= a;
第二部计算:a = a + 1;
++ 放前 放后 执行顺序是不一样的。
第3个回答  2011-07-13
byte a=4,b=++a;这一句中 b=++a的意思就是a先自增然后b=自增后的a,也就等价于
byte a=4;
a=(byte)(a+1);
byte b=a;
第4个回答  2011-07-13
++a 首先是本身自加1,然后在赋值给b
System.out.println(a); //这时的a已经自加1,所以是5
第5个回答  2011-07-13
这个结果主要是后边b=++a,照成的,a本来等于4,++a就变成了5给了b,并且a也变成了5,你主要是没有区分++a,a++的区别,就是先给值,后给值的问题。。

JAVA a 和b的问题
关键就是在执行b=++a的时候,++a的话是a自己先完成+1,然后它的值赋给了b。再者楼主可以写个别的例子测试下,修改下上面的代码 public class HelloJava{ public static void main(String[] args){ byte a=4;++a;b=a;System.out.println(a);System.out.println( b);} } 这个也是java的底层...

java中有两个对象a和b,当a=b的时候是把a的引用给了b,还是把b的引用给了...
在java中,关于对象的使用都是通过引用来实现的,引用实际上就是一个内存地址,我们说的对象a和对象b,变量a和变量b实际上就是一个引用变量指向一个内存地址,在这块内存地址上刚好储存的数据是对象而已。因此,a=b实际上就是将变量b的引用值(地址)赋给a变量,这么一来a和b都指向了原先b指向的对...

java两个类相互调用的问题
可以这样,在A,B类中分别设一个静态变量 可以是 boolean行的,当A调用b 的时候 把B类得这个变量改了,然后再B的方法中,依照这个变量来决定是否还调用A的方法 同理可以在B调用A的时候 修改A的变量,A会依照这个变量来决定是否还调用B 这样达到,A调完B 就不会有B 再去A ,B 调完A 之后A...

Java 中的一些小问题~
如果你把a的引用指向了null,对于你的问题b是否会等于null,这有两种情况 一种是:实例a被一个以上的引用指向,a是其中一个,如果a指向了null,但是实例a还有其他引用指向,b不会等于null 第二种是:实例a只有一个引用指向,当你把这个引用指向null后,那么实例就没有引用指向它了,那么java的垃圾回...

java写两个类(A,B)要求A类有两个构造方法,私有成员,方法。B类调用A类...
B{ public B(){ System.out.println("调用无参构造方法");} public B(int b2){ System.out.println("调用有参构造方法");} } public class TestABMain { public static void main(String[] args) { \/\/ TODO Auto-generated method stub A a=new A();} } 代码如图:运行结果如图:

java中,两个数组a[],b[],a=b后,a中值变b也会变了吗?
会改变. 因为数组a=数组b 只是浅层复制,代码如下 import java.util.Arrays;public class ArrayDemo {public static void main(String[] args) {int[] b = {1,3,5,7,9};int[] a = b;a[0]=12;\/\/a数组的元素改变了System.out.println(Arrays.toString(b));\/\/b数组的元素跟着改变\/\/...

java程序分析(a>b)?a:b
这个表达式的意思是 :假如a大于b则表达式执行问号后面的表达式(如果是的话)并返回该值a,假如a不大于b则执行冒号后面的表达式b并返回b 举例:String value = 5>4?"大于4":"5不大于4";这里处理结果是value="大于4"

JAVA代码,A方法调用B方法,B方法没有返回值,如果B方法中异常,怎样让A方 ...
public static void A() { ・・・・・・try { B();} catch(Exception e) { System.out.println("B方法调用时出现异常。");} ・・・・・・} private void B() { ・・・・&...

java中,有两个类A和B,B类中包含有参数构造方法b1和无参数方法b2,那在A ...
class B{ public B(){ System.out.println("调用无参构造方法");} public B(int b2){ System.out.println("调用有参构造方法");} } public class TestABMain { public static void main(String[] args) { \/\/ TODO Auto-generated method stub A a=new A();} } 代码如图:运行结果如图...

java问题
StringBuffer b = new StringBuffer ("B"); ---b对象指向内存地址比如b1,b1中的值为“B”这是a的值为A,b的值为B,当你调用了operate (a,b); 方法并传入ab的时候,实际上是传入的a和b的一个对象副本,只不过副本指向内存地址和a,b一样,所以值也一样。static void operate(StringBuffer...

相似回答