论坛首页 Java企业应用论坛

Java容易搞错的知识点-觉得基础扎实的来看

浏览 61884 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-03-07  
onlylau 写道
第二题:
a == "hello" + "world"   java编译器会直接将"hello"+"world"优化成"helloworld",与a都是指向常量池中的"helloworld",所以相等,返回true
a == (x + y)  这里的x+y是引用相加操作,可以用正常的字符相加解释,是生成了新的StringBuilder对象,所以两个指向的不是一个地方,返回false

第四题:
上面已经有人回答的差不多了,其实public static void append(StringBuffer a, StringBuffer b)中的变量a,b只是main方法中的变量a,b的引用地址副本,也就是说相当于append中的a与main中的a是指向同一个地址,append中的b与main中的b是指向同一个地址,所以a.append(b)操作影响到了main方法中的a,但是append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向

这个答的比较详尽,不过不是第四题,而是第七题啊
0 请登录后投票
   发表时间:2011-03-07  
/**
* @author 子弹哥
*
*/
public class TestRef {

public static void main(String[] args) {
Aa a1 = new Aa(1);
Aa a2 = new Aa(2);
append(a1, a2);
System.out.println(a1.getA() + "," + a2.getA());
a2 = a1;
System.out.println(a1.getA() + "," + a2.getA());
}

public static void append(Aa a1, Aa a2) {
a1.setA(a2.getA());
a2 = a1;
}

}

class Aa {
private int a;

public Aa(int a) {
this.a = a;
}

public int getA() {
return a;
}

public void setA(int a) {
this.a = a;
}

}

感觉还是有点问题,如果append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向。那么上面我改的这个例子,好像不是这么回事
0 请登录后投票
   发表时间:2011-03-07  
投你个良好 请帮忙细讲下
double j = 1 / 4 + 3 / 4;

j==0 是怎么个隐形 精度转换
0 请登录后投票
   发表时间:2011-03-07  
so easy....
0 请登录后投票
   发表时间:2011-03-07  
forsecond 写道
/**
* @author 子弹哥
*
*/
public class TestRef {

public static void main(String[] args) {
Aa a1 = new Aa(1);
Aa a2 = new Aa(2);
append(a1, a2);
System.out.println(a1.getA() + "," + a2.getA());
a2 = a1;
System.out.println(a1.getA() + "," + a2.getA());
}

public static void append(Aa a1, Aa a2) {
a1.setA(a2.getA());
a2 = a1;
}

}

class Aa {
private int a;

public Aa(int a) {
this.a = a;
}

public int getA() {
return a;
}

public void setA(int a) {
this.a = a;
}

}

感觉还是有点问题,如果append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向。那么上面我改的这个例子,好像不是这么回事


看你的这句.这样改成a1为2了.输出应该是全2
a1.setA(a2.getA());

0 请登录后投票
   发表时间:2011-03-07  
forsecond 写道
/**
* @author 子弹哥
*
*/
public class TestRef {

public static void main(String[] args) {
Aa a1 = new Aa(1);
Aa a2 = new Aa(2);
append(a1, a2);
System.out.println(a1.getA() + "," + a2.getA());
a2 = a1;
System.out.println(a1.getA() + "," + a2.getA());
}

public static void append(Aa a1, Aa a2) {
a1.setA(a2.getA());
a2 = a1;
}

}

class Aa {
private int a;

public Aa(int a) {
this.a = a;
}

public int getA() {
return a;
}

public void setA(int a) {
this.a = a;
}

}

感觉还是有点问题,如果append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向。那么上面我改的这个例子,好像不是这么回事


正常啊,有什么问题?
0 请登录后投票
   发表时间:2011-03-07  
neverforget 写道
投你个良好 请帮忙细讲下
double j = 1 / 4 + 3 / 4;

j==0 是怎么个隐形 精度转换

先计算后赋值;计算时,int/int=0
0 请登录后投票
   发表时间:2011-03-07  
奇巧淫技总是让人欲罢不能
0 请登录后投票
   发表时间:2011-03-07  
neverforget 写道
投你个良好 请帮忙细讲下
double j = 1 / 4 + 3 / 4;

j==0 是怎么个隐形 精度转换


这里的1 3 4都是默认是int型的,两个int型间运算结果也应该是int型,所以都为0

就好像两个不同基本类型之间操作是向上转型,如int型与long型运算,结果应该是向上转为long型,而两个同类型的之间操作当然是相同类型了
0 请登录后投票
   发表时间:2011-03-07  
3,4,6 确实是不知道,惭愧。
5是陷阱题,刷的一眼过去不仔细看确实容易错那。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics