try { System.out.println("hello"); System.exit(0); } finally { System.out.println("good bye"); } /* hello */
try { int r = 1 / i; } catch (Exception e) { e.printStackTrace(); return true; } finally { return false; } /* false */
1.import java.awt.Point;
class Assign
{
public static void main(String args[])
{
int a = 1;
int b = 2;
Point x = new Point(0,0);
Point y = new Point(1,1); //1
System.out.println(“a is ” + a);
System.out.println(“b is ” + b);
System.out.println(“x is ” + x);
System.out.println(“y is ” + y);
System.out.println(“Performing assignment and ” +
“setLocation…”);
a = b;
a++;
x = y; //2
x.setLocation(5,5); //3
System.out.println(“a is “+a);
System.out.println(“b is “+b);
System.out.println(“x is “+x);
System.out.println(“y is “+y);
}
}
这段代码生成以下输出结果?
a is 1
b is 2
x is java.awt.Point[x=0,y=0]
y is java.aet.point[x=1,y=1]
Performing assignment and setLocation…
a is 3
b is 2
x is java.awt.point[x=5,y=5]
y is java.aet.point[x=5,y=5]
解析网址:http://zhidao.baidu.com/question/106550817.html
解析:
当是基本数据类型改变时,不改变原有的数据,若是改变的是对象类型时,则会改变。
对于,这里的a和b,由于是基本数据类型,所以当b赋给a时,只是将b的值给了a,a自己的值不变,当a或b改变时,a或b的值是不变的哦。
对于这里的x和y,由于是对象类型,所以当y赋给x时,(x,y只是相应对象的引用),所以只是将x变成了y所指的对象的引用,此时x和y都是对象A的引用,所以当改变x或y时,x和y都会变,他们是一样的。
class Main { public static void main(String args[]) { int a = 1; int b = 2; String stra = "stra"; String strb = "strb"; A aa = new A(); A aaa = new A(); aa.a = 11; aaa.a = 111; System.out.println("a=" + a); System.out.println("b=" + b); System.out.println("Aaa=" + aa.a); System.out.println("Aaaa=" + aaa.a); System.out.println("stra=" + stra); System.out.println("strb=" + strb); a = b; a++; aaa = aa; aa.a++; stra = strb; stra = "buhao"; System.out.println("a=" + a); System.out.println("b=" + b); System.out.println("Aaa=" + aa.a); System.out.println("Aaaa=" + aaa.a); System.out.println("stra=" + stra); System.out.println("strb=" + strb); } } class A { int a; } /* 结果为: a=1 b=2 Aaa=11 Aaaa=111 stra=stra strb=strb a=3 b=2 Aaa=12 Aaaa=12 stra=buhao strb=strb */
2.Java中的原生数据类型和引用类型的参数传递:
class Point { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } } public class Main { public void changeInt(int a) { a = 3; } public void changePoint(Point point) { point.setX(5); point.setY(6); } public void changeString(String str) { str = "abc"; System.out.println(str); } public static void main(String[] args) { int a = 1;// 语句(1) Main pt = new Main();// 语句(2) pt.changeInt(a);// 语句(3) System.out.println(a);// 语句(4) 1 Point point = new Point(1, 2);// 语句(5) pt.changePoint(point);// 语句(6) System.out.println(point.getX());// 语句(7) 5 System.out.println(point.getY());// 语句(8) 6 String str = "xyz";// 语句(9) pt.changeString(str);// 语句(10)abc System.out.println(str);// 语句(11)xyz } } /* 运行结果: 1 5 6 abc xyz */
问题1:当执行完语句(4)后,打印的结果是什么?为什么?
1 对于原生数据类型来说,它仅仅是把 main方法里面的a的值传过去,传值完后,两者之间没有任何的关系,
问题2:当执行完语句(7)(8)后,打印的结果是什么?为什么?
5 6 传的是引用,即是对象的内存地址
问题3:当执行完语句(11)后,打印的结果是什么?为什么?
xyz
解析网址:http://leeldy.blog.163.com/blog/static/1398530620091279551463/
总结: 在java里面,对方法的参数传递,不管是原生数据类型还是引用类型,一律是传值:pass by value。对原生数据类型来说,传递的值就是它被赋予的那个值,比如说 int a = 3 就把3这个值传到方法里面去;引用类型来说,引用本身是一个地址,是一个int类型的内存地址值,所以说它把这个值传递到方法里面去传递的也是值。