B: List list = jdbcTemplate.queryForList(sql);
这两句有什么区别,A这样写有什么好处
40 个解决方案
#1
没区别……
#2
呃,不知道
学习,祝楼主好运
学习,祝楼主好运
#3
A不会报错吗?
#4
我靠,测试了下A尽然不报错。
#5
没分别,也没什么特别的好处
= 是从右到左运算的,第一种情况相当于给list赋了2次值,没什么太大意义
一般情况,多个变量需要同时赋值这样做比较简洁,比如
int i;
int j;
i = j = 10;
System.out.printf("i=%d, j=%d\n", i, j);
//i和j两个变量同时赋值,这样才比较意义,同一个变量,没必要
= 是从右到左运算的,第一种情况相当于给list赋了2次值,没什么太大意义
一般情况,多个变量需要同时赋值这样做比较简洁,比如
int i;
int j;
i = j = 10;
System.out.printf("i=%d, j=%d\n", i, j);
//i和j两个变量同时赋值,这样才比较意义,同一个变量,没必要
#6
恩这样做看起来比较清爽些,一目了然
#7
楼主的钻研精神值得我们学习,
不过这两种写法确实没有区别。
不过这两种写法确实没有区别。
#8
现在这个语句是用来进行数据库的查询的
我主要认为 数据库查询出来的数据在X这一块,而Y指向了这个X,现在把x的结果集清空过后,那么获取的Y也就是为空了
但是Y指向了X,Y再次指向Y的话,会不会将结果集赋值过来,将X结果集清空的时候后,获取Y会不会还是有值
我主要是这么认为的,那些对这块理解的比较深的人帮帮忙,解释下吧!
我主要认为 数据库查询出来的数据在X这一块,而Y指向了这个X,现在把x的结果集清空过后,那么获取的Y也就是为空了
但是Y指向了X,Y再次指向Y的话,会不会将结果集赋值过来,将X结果集清空的时候后,获取Y会不会还是有值
我主要是这么认为的,那些对这块理解的比较深的人帮帮忙,解释下吧!
#9
#10
宝哥V5!
#11
但是Y指向了X,Y再次指向Y的话,会不会将结果集赋值过来,将X结果集清空的时候后,获取Y会不会还是有值
Y是不会有值的,Y指向Y(Y指向X),归根结底Y还是指向X。
Y是不会有值的,Y指向Y(Y指向X),归根结底Y还是指向X。
#12
int a = a = 10 从右运算先给a赋值10 然后将a值赋给a
和 int a = 10没区别
和 int a = 10没区别
#13
没有什么区别
#14
list和int应该是有区别的,int的数字应该都是存放在常量区里面,不会清空的
#15
顶下五楼的
#16
A list被重新引用了一下,和B 没啥区别
#17
学习一下、、、加油
#18
貌似没有什么区别
#19
a=a=b;由于=是右结合的所以相当于a=(a=b);
而(a=b)作为表达式的值,就是a的值
所以实际做的操作是
a=b;
a=a;//这步毫无意义
而(a=b)作为表达式的值,就是a的值
所以实际做的操作是
a=b;
a=a;//这步毫无意义
#20
还有这写法,学习了。。。
#21
Java中a=a=b是要报错的啊!
#22
要是不是这样的第二个list要是换成别的话 还有点意思
#23
囧,为什么我也觉得A会报错
#24
这个真没有什么意义...
#25
貌似从右向左执行,在VC中不会报错,不过这样写帧没必要啊!
#26
我认为这样写是极其不规范的。
#27
这种写法编译器应该会直接处理掉
#28
学习了
楼主钻石精神不错
楼主钻石精神不错
#29
看来LZ没理解引用啊
首先
List X;
List Y = X; //Y也指向X所引用的对象
X.clear(); //X清空就是清空X所引用的对象,Y和X引用同一个对象,所以也就是Y(所引用的对象)被清空
List Y = Y = X;
相当于 Y = (Y = X);
相当于 Y = X; Y = Y; //首先Y指向X所以用的对象,接着Y指向Y所引用的对象,归根还是Y指向X引用的对象
X.clear(); //X清空就是清空X所引用的对象,Y和X引用同一个对象,所以也就是Y(所引用的对象)被清空
#30
学习了
#31
呵呵,List Y = Y = X;
相当于 Y = (Y = X);啊
相当于 Y = (Y = X);啊
#32
没有任何价值存在!
#33
没实用价值
#34
没什么区别
#35
却是没啥区别,lz不错嘛
#36
恩 看来A的写法真的是没有价值,暂时告一段落, 多下大家的回答。稍后结贴。。。
#37
这个估计是笔误。实际上A比B的效率低。编译成字节码看下:
A:Test1 test=test=new Test1();
很明显A执行的代码比B要多。
A:Test1 test=test=new Test1();
Compiled from "Test1.java"
public class com.codetest.test.Test1 {
public com.codetest.test.Test1();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2 // class com/codetest/test/Test1
3: dup
4: invokespecial #3 // Method "<init>":()V
7: dup
8: astore_1
9: astore_1
10: return
}
[/cdoe]
B:Test1 test=new Test1();
[code=Assembly]
Compiled from "Test1.java"
public class com.codetest.test.Test1 {
public com.codetest.test.Test1();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2 // class com/codetest/test/Test1
3: dup
4: invokespecial #3 // Method "<init>":()V
7: astore_1
8: return
}
很明显A执行的代码比B要多。
#38
没什么区别吧、就是同一个变量赋了2次值,没意义。
#39
呵呵,我觉的A手贱了 。、、
#40
这种小问题就算了,没区别的
#1
没区别……
#2
呃,不知道
学习,祝楼主好运
学习,祝楼主好运
#3
A不会报错吗?
#4
我靠,测试了下A尽然不报错。
#5
没分别,也没什么特别的好处
= 是从右到左运算的,第一种情况相当于给list赋了2次值,没什么太大意义
一般情况,多个变量需要同时赋值这样做比较简洁,比如
int i;
int j;
i = j = 10;
System.out.printf("i=%d, j=%d\n", i, j);
//i和j两个变量同时赋值,这样才比较意义,同一个变量,没必要
= 是从右到左运算的,第一种情况相当于给list赋了2次值,没什么太大意义
一般情况,多个变量需要同时赋值这样做比较简洁,比如
int i;
int j;
i = j = 10;
System.out.printf("i=%d, j=%d\n", i, j);
//i和j两个变量同时赋值,这样才比较意义,同一个变量,没必要
#6
恩这样做看起来比较清爽些,一目了然
#7
楼主的钻研精神值得我们学习,
不过这两种写法确实没有区别。
不过这两种写法确实没有区别。
#8
现在这个语句是用来进行数据库的查询的
我主要认为 数据库查询出来的数据在X这一块,而Y指向了这个X,现在把x的结果集清空过后,那么获取的Y也就是为空了
但是Y指向了X,Y再次指向Y的话,会不会将结果集赋值过来,将X结果集清空的时候后,获取Y会不会还是有值
我主要是这么认为的,那些对这块理解的比较深的人帮帮忙,解释下吧!
我主要认为 数据库查询出来的数据在X这一块,而Y指向了这个X,现在把x的结果集清空过后,那么获取的Y也就是为空了
但是Y指向了X,Y再次指向Y的话,会不会将结果集赋值过来,将X结果集清空的时候后,获取Y会不会还是有值
我主要是这么认为的,那些对这块理解的比较深的人帮帮忙,解释下吧!
#9
#10
宝哥V5!
#11
但是Y指向了X,Y再次指向Y的话,会不会将结果集赋值过来,将X结果集清空的时候后,获取Y会不会还是有值
Y是不会有值的,Y指向Y(Y指向X),归根结底Y还是指向X。
Y是不会有值的,Y指向Y(Y指向X),归根结底Y还是指向X。
#12
int a = a = 10 从右运算先给a赋值10 然后将a值赋给a
和 int a = 10没区别
和 int a = 10没区别
#13
没有什么区别
#14
list和int应该是有区别的,int的数字应该都是存放在常量区里面,不会清空的
#15
顶下五楼的
#16
A list被重新引用了一下,和B 没啥区别
#17
学习一下、、、加油
#18
貌似没有什么区别
#19
a=a=b;由于=是右结合的所以相当于a=(a=b);
而(a=b)作为表达式的值,就是a的值
所以实际做的操作是
a=b;
a=a;//这步毫无意义
而(a=b)作为表达式的值,就是a的值
所以实际做的操作是
a=b;
a=a;//这步毫无意义
#20
还有这写法,学习了。。。
#21
Java中a=a=b是要报错的啊!
#22
要是不是这样的第二个list要是换成别的话 还有点意思
#23
囧,为什么我也觉得A会报错
#24
这个真没有什么意义...
#25
貌似从右向左执行,在VC中不会报错,不过这样写帧没必要啊!
#26
我认为这样写是极其不规范的。
#27
这种写法编译器应该会直接处理掉
#28
学习了
楼主钻石精神不错
楼主钻石精神不错
#29
看来LZ没理解引用啊
首先
List X;
List Y = X; //Y也指向X所引用的对象
X.clear(); //X清空就是清空X所引用的对象,Y和X引用同一个对象,所以也就是Y(所引用的对象)被清空
List Y = Y = X;
相当于 Y = (Y = X);
相当于 Y = X; Y = Y; //首先Y指向X所以用的对象,接着Y指向Y所引用的对象,归根还是Y指向X引用的对象
X.clear(); //X清空就是清空X所引用的对象,Y和X引用同一个对象,所以也就是Y(所引用的对象)被清空
#30
学习了
#31
呵呵,List Y = Y = X;
相当于 Y = (Y = X);啊
相当于 Y = (Y = X);啊
#32
没有任何价值存在!
#33
没实用价值
#34
没什么区别
#35
却是没啥区别,lz不错嘛
#36
恩 看来A的写法真的是没有价值,暂时告一段落, 多下大家的回答。稍后结贴。。。
#37
这个估计是笔误。实际上A比B的效率低。编译成字节码看下:
A:Test1 test=test=new Test1();
很明显A执行的代码比B要多。
A:Test1 test=test=new Test1();
Compiled from "Test1.java"
public class com.codetest.test.Test1 {
public com.codetest.test.Test1();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2 // class com/codetest/test/Test1
3: dup
4: invokespecial #3 // Method "<init>":()V
7: dup
8: astore_1
9: astore_1
10: return
}
[/cdoe]
B:Test1 test=new Test1();
[code=Assembly]
Compiled from "Test1.java"
public class com.codetest.test.Test1 {
public com.codetest.test.Test1();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2 // class com/codetest/test/Test1
3: dup
4: invokespecial #3 // Method "<init>":()V
7: astore_1
8: return
}
很明显A执行的代码比B要多。
#38
没什么区别吧、就是同一个变量赋了2次值,没意义。
#39
呵呵,我觉的A手贱了 。、、
#40
这种小问题就算了,没区别的