java 基础知识(程序结果题)

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类型的内存地址值,所以说它把这个值传递到方法里面去传递的也是值。

原文地址:https://www.cnblogs.com/xiaoxian1369/p/2225792.html