public class Test{
public static void main(String []args){
boolean c=false;
……
……
if(c==true){
……
}
if(true==c){
……
} }
}
上面俩个if语句的写法有什么区别……求解
public static void main(String []args){
boolean c=false;
……
……
if(c==true){
……
}
if(true==c){
……
} }
}
上面俩个if语句的写法有什么区别……求解
……
}
可以避免少写等号的错误
如果写成if(c=true){
……
}
无论c是true还是false都会进入循环
if(c==true){//这个是把C的应用内存地址拿去和true 比较
……
}
if(true==c){//这个是把true拿去和c的应用地址比较
……
}
也就是说比较的对象的先后顺序不一样其他没有什么区别吧。
个人觉得。
假设在一个简单的登录验证系统中,要求只有用户名是admin的才能登录,c是从上一个页面传过来的用户名,那么c的值就有可能是空值是吧,那么
if(c.equals("admin"){
……
}
if("admin".equals(c)){
……
}
有区别吗?
……
}
可以避免少写等号的错误
如果写成if(c=true){
……
}
无论c是true还是false都会进入循环
这样写更好
if(c) {
.........
}else {
......
}如果C是成员变量并且没有初始化会使用默认值false,但在静态方法里面进行比较会报错,因为静态方法先初始化。如果C是局部变量没有初始化同样报错。
直接
if(flag)
{
//
}
再问高手们一下……
假设在一个简单的登录验证系统中,要求只有用户名是admin的才能登录,c是从上一个页面传过来的用户名,那么c的值就有可能是空值是吧,那么
if(c.equals("admin"){
……
}
if("admin".equals(c)){
……
}
有区别吗?
根据equals的自反性,两者没有区别。
这和空值的没什么关系,除非重写了equals方法。
boolean c=false;
……
……
if(c==true){
……
}
if(true==c){
……
}搞不懂为什么这么写,c本身已经是boolean变量了直接
if(c)
{}
if(!c){}若是c没有初始化,会有提示的~~
不过什么机会下需要用boolean值和true/false比较呢?
区别是有的
两者没区别,都是应当弃用的写法
直接if(c){
//do sth
}
else{
// do another thing
}
//do sth
}
else{
// do another thing
}觉得这种好
那些写C语言的为了防止==错写成=而故意将常量放到左边,变量放到右边,这样一旦写错就能立即发现
在Java中if里面只有boolean型数据才行,所以没必要写成true==c了
C#代码代码如下 bool c = false; if (c==true)
{
Console.WriteLine("c==true");
}
if (true==c)
{
Console.WriteLine("true==c");
}
反汇编代码如下
bool c = false;
0000003e xor edx,edx
00000040 mov dword ptr [ebp-40h],edx if (c==true)
00000043 cmp dword ptr [ebp-40h],0
00000047 sete al
0000004a movzx eax,al
0000004d mov dword ptr [ebp-44h],eax
00000050 cmp dword ptr [ebp-44h],0
00000054 jne 00000064
{
00000056 nop
Console.WriteLine("c==true");
00000057 mov ecx,dword ptr ds:[02962088h]
0000005d call 5BC54C6C
00000062 nop
}
00000063 nop
if (true==c)
00000064 cmp dword ptr [ebp-40h],0
00000068 sete al
0000006b movzx eax,al
0000006e mov dword ptr [ebp-44h],eax
00000071 cmp dword ptr [ebp-44h],0
00000075 jne 00000085
{
00000077 nop
Console.WriteLine("true==c");
00000078 mov ecx,dword ptr ds:[0296208Ch]
0000007e call 5BC54C6C
00000083 nop
}
00000084 nop 测试完才发现时java的贴,考虑可能有的编译器优化的因素存在,以上代码仅供参考
2)equals比较的是2个对象的值;
看了半天就一楼提出来了。多看看书吧。
字符串比较的时候,一定要写成"admin".equals(c)这样的形式。
……
}
if("admin".equals(c)){
……
}
这两个还是后面这个写法好,但是原因和上面的不一样,当c为null的时候,第一个写法会抛出nullpointer异常,第二个不会,推荐第二个。
从语法和编译上讲是没有什么区别的,但是在运行时,可能会有区别,比如if(c.equals("admin"):当c的值为null时就会出现空指针异常,从而程序执行错误,但是能知道是这个地方发生了错误。而if("admin".equals(c):无论c的值是否为空或null都不会产生运行时异常,可是一旦c的值为空或null,得到了错误的结果,你却不容易发现是这个地方出错了。
对头,很多时候人们都在这样写:
if(2==i)
{
...
}
if(c.equals("admin")){}和if("admin".equals(c)){}在c不为空的时候没有什么区别 不过当c为空的时候 if(c.equals("admin")){}就会产生空指针的异常 而后一种就不会有这种情况……
if(c==true){//这个是把C的应用内存地址拿去和true 比较
……
}
if(true==c){//这个是把true拿去和c的应用地址比较
……
}
也就是说比较的对象的先后顺序不一样其他没有什么区别吧。
个人觉得。
public static void main(String[] args) {
boolean c=false;
if(c=true){
System.out.println("1");
}
if(true==c){
System.out.println("2");
}
}
//结果:1,2
}