站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题+操作符的问题----小小疑问~

+操作符的问题----小小疑问~

摘要: +操作符的问题----小小疑问~


请看下面的程序:
class TestInt
{
public static void main(String args[])
{

int i=10,j=10,k=10;
int t=(i==j)?++i:--k;
System.out.println(-#34;t=-#34;+t);
System.out.println(-#34;i=-#34;+i+10);
System.out.println(-#34;k=-#34;+k+000);

}
}

打印结果是:
t=11
i=1110
k=100

t,i没有问题,
只是k,为什么会是100?而不是10000??


K的值肯定是100~~~~~~~~~
因为System.out.println(-#34;k=-#34;+k+000)中的+是要加上-#34;-#34;的~~~~~
你这样等于100+000还是等于100
如果改成这样System.out.println(-#34;k=-#34;+k+-#34;000-#34;);
那么K就是10000了


这也可以,没见过
奇了怪了


那就奇怪了!为什么i的值还是1110呢?而不是11呢?


TO joy_cz() :
好像不是你说的这样的.

如果K本来应该是10的,+后,变成100了,请看清楚.


高手出来解答啊~

不要等到明天啊



http://community.csdn.net/Expert/topic/5039/5039559.xml?temp=9.283084E-02
呵呵,找到了.学习


楼主从整型的内存状态来考虑:000的存储状态是什么?全0。
那么0的存储状态呢?全0。
所以机器在内存中认为bit位全0的是0,不管你连接多少个0,结果都是一个0,若要实现多个0的效果可以加-#34;-#34;,连接字符串。


TO:lanseliuying()

可是此时的+符号是作为字符串连接的,比如上面的 i 的值.考虑内存中的状态的话,i 的值不会是1110了吧?


原则是“+”专门用于数值处理,因此数据转换的原则是转成数值类型
虽然此时的+符号是作为字符串连接的,但不是说一定要把连接的类型作为字符串来处理。



class TestInt
{
public static void main(String args[])
{

int i=10,j=10,k=10;
/*
*++i赋t=11,k值不变
     * result : i=11;t=11;k=10;
*/
int t=(i==j)?++i:--k;
System.out.println(-#34;t=-#34;+t);//print:t=11
System.out.println(-#34;i=-#34;+i+10);//print i=1110;当println方法参数以字符串开头                    //时,后面"+"为字符连接符
System.out.println(-#34;k=-#34;+k+000);//这里主要是注意-#34;000-#34;实际存着0 参考楼上解说所得

}
}




应该是内存中全0用一个0来表示


k的值是10阿
000是数字,在做加法时当然表示是0
如果要达到k=10000的效果的话
应该是:
System.out.println(-#34;k=-#34;+k+-#34;000-#34;);


真是找事情做啊LZ!!
你这叫钻牛角尖~这样的问题研究没什么意思,你想要两个相加就先()起来!


System.out.println()里面的参数不是String 类型的话,会自动调用toString()的方法.

10.toString()是-#34;10-#34;,而000.toString()是-#34;0-#34;.

因为直接在程序中写数字会有一个类型转换的过程,最终取到的只是它的值


你们有没有试过System.out.println(-#34;k=-#34;+k+011) ;
输出结果是:k=109.奇怪吧?因为001是八进制的

如果是System.out.println(-#34;k=-#34;+k+009) ;
则不能通过编译,因为八进制怎么可能出现9 ??

所以上边说的什么toString()方法根本不严密


↑返回目录
前一篇: 怎样将 HH:MM:SS 这种类型的字符串转化为 date 类型
后一篇: 路过的帮看看简单的集合问题,谢了