publicstaticvoidmain(String[] args){int j =0;int i =0;int m =0;int n =0;for(; i <10; i++){
m = j++;
n = n++;}
System.out.println("i:"+ i);
System.out.println("j:"+ j);
System.out.println("n:"+ n);
System.out.println("m:"+ m);}
2
、
关
于
l
i
s
t
删
除
元
素
\color{7f1A8A}2、关于list删除元素
2、关于list删除元素
下面的运行结果应该输出什么?
publicstaticvoidmain(String[] args){
List<Integer> list =newArrayList();
list.add(1);
list.add(3);
list.add(4);
list.add(7);
list.add(8);
list.add(9);
list.add(2);
list.add(5);
list.add(6);for(int i =0; i <9; i++){if((list.get(i)&1)==1){
list.remove(i);}}for(int i =0; i < list.size(); i++){
System.out.println(list.get(i));}}
会出现如下异常
Exception in thread "main"----------------
java.lang.IndexOutOfBoundsException: Index:6, Size:5
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at HttpServer.wwvae.main(wwvae.java:27)
原因
移除元素后,list大小不再是9,因此 i 的增加会导致空指针异常。
那么修改 9 为 list.size() ,是否正常输出所有的偶数
for(int i =0; i < list.size(); i++){if((list.get(i)&1)==1){
list.remove(i);}}
输出结果
34826
原因
还是因为移除元素后,原来的 i+1 变成了 i,躲过了检查,所以漏删。
修改办法
办法一:加上i--;for(int i =0; i < list.size(); i++){if((list.get(i)&1)==1){
list.remove(i);
i--;}}
有同学提出,换一种迭代方式删
for(int i : list){if((i &1)==1){
list.remove(i);}}
会出现如下异常
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at HttpServer.wwvae.main(wwvae.java:32)
staticint i;publicstaticvoidmain(String[] args){int n =0;for(int i =0; i <4; i++){
n +=cal(i);}
System.out.println(n);}publicstaticintcal(int k){int j =0;return++i + k + j++;}
实际运行结果
16
原因分析
j++每次都是0
i 是全局变量,每次增加1
k是根据每次传入的值计算
循环四次每次:
1+0+0
2+1+0
3+2+0
4+3+0
合计:16
4
、
如
何
获
取
I
n
t
e
g
e
r
.
M
A
X
V
A
L
U
E
值
的
3
/
4
\color{7f1A8A}4、如何获取 Integer.MAX_VALUE值的 3/4
4、如何获取Integer.MAXVALUE值的3/4
下面的运行结果应该输出什么?
int max = Integer.MAX_VALUE;
System.out.println("max:"+ max);int result = max *3/4;int result1 = max /4*3;
System.out.println("max * 3 / 4:"+ result);
System.out.println("max / 4 * 3:"+ result1);
结果
max:2147483647
max *3/4:536870911
max /4*3:1610612733
很明显,根据数学尝试我们知道,第一个运算结果是假的,为什么呢?因为 int 类型发送溢出了。
如何修改:为了防止溢出,需要进行先除后乘。
第二个答案就正确么?也不正确,正确答案是:1610612735.25,因为 int 是整数,所以进行了截取,这里跟第四问一样有趣,改写成double就行了(float依然有精度缺失)。
max:2.147483647E9
max *3/4:1.61061273525E9
max /4*3:1.61061273525E9
6
、
关
于
S
t
r
i
n
g
的
e
q
u
a
l
s
\color{7f1A8A}6、关于String 的 equals
6、关于String的equals
8
、
J
a
v
a
是
引
用
传
递
还
是
值
传
递
\color{7f1A8A}8、Java是引用传递还是值传递
8、Java是引用传递还是值传递
下面的运行结果应该输出什么?
publicclassfvybhj{publicstaticvoidmain(String[] args){int n =3;
System.out.println("Before change, n = "+ n);changeData(n);
System.out.println("After changeData(n), n = "+ n);}publicstaticvoidchangeData(int nn){
nn =10;}}
1.关于自增下面的运行结果应该输出什么?public static void main(String[] args) { int j = 0; int i = 0; int m = 0; int n = 0; for (; i < 10; i++) { m = j++; n = n++; } System.out.println("i: