该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间: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的指向 这个答的比较详尽,不过不是第四题,而是第七题啊 |
|
返回顶楼 | |
发表时间: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的指向。那么上面我改的这个例子,好像不是这么回事 |
|
返回顶楼 | |
发表时间:2011-03-07
投你个良好 请帮忙细讲下
double j = 1 / 4 + 3 / 4; j==0 是怎么个隐形 精度转换 |
|
返回顶楼 | |
发表时间:2011-03-07
so easy....
|
|
返回顶楼 | |
发表时间: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()); |
|
返回顶楼 | |
发表时间: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的指向。那么上面我改的这个例子,好像不是这么回事 正常啊,有什么问题? |
|
返回顶楼 | |
发表时间:2011-03-07
neverforget 写道 投你个良好 请帮忙细讲下
double j = 1 / 4 + 3 / 4; j==0 是怎么个隐形 精度转换 先计算后赋值;计算时,int/int=0 |
|
返回顶楼 | |
发表时间:2011-03-07
奇巧淫技总是让人欲罢不能
|
|
返回顶楼 | |
发表时间:2011-03-07
neverforget 写道 投你个良好 请帮忙细讲下
double j = 1 / 4 + 3 / 4; j==0 是怎么个隐形 精度转换 这里的1 3 4都是默认是int型的,两个int型间运算结果也应该是int型,所以都为0 就好像两个不同基本类型之间操作是向上转型,如int型与long型运算,结果应该是向上转为long型,而两个同类型的之间操作当然是相同类型了 |
|
返回顶楼 | |
发表时间:2011-03-07
3,4,6 确实是不知道,惭愧。
5是陷阱题,刷的一眼过去不仔细看确实容易错那。 |
|
返回顶楼 | |