我看this,值传递,引用传递

一、this关键字
this的用途
1.区分属性和参数(加了this的就表示属性,没有加的则是参数)。
2.this关键字可以用来调用类中的构造方法,注意:所带的参数必须要完全一致。
例如:1、 public Sister(String name,int age){
this.name=name;
this.age=age;
}
this.name表示属性,name表示参数;把name的值传给this.name。就修改了属性值。
2、 当要调用此构造方法时,用this(name,age)语句即可实现。


那么this到底表示谁呢?
当我们运行main函数Girl时,
public class Girl{
public static void main(String []args){
Sister sis=new Sister(null,0);
sis.getName("莉莉");
int i=18;
sis.changeAge(i);
System.out.println(i);
Pet p=new Pet();
p.setName("小猫");
System.out.println("给她一只"+this.name);
sis.havePet(p);
System.out.println("她原来有"+p.getName());
}

}

会出现结果:莉莉的年龄为19
18
莉莉有一只小狗
她原有一只小狗
而我们的类Pet和类Sister中都有用到了this,但是根据结果我们可以看出,当调用方法sis.setName(“莉莉”)时,输出name的结果是“莉莉”;当调用p.setName("小狗")时,输出的name结果是“小狗”。由此可知this表示当前方法的对象。即a对象调用方法时,那么方法中的this就表示a。


Java的数据类型分为两类:
1.基本数据类型(八大基本数据类型)
byte 字节型 8bit 1byte -128~127
short 短整型 16bit 2byte
int 整型 32bit 4byte
long 长整型 64bit 8byte
float 浮点型单精度 32bit 4byte
double 浮点型双精度 64bit 8byte

char 字符型 16bit 2byte
boolean 布尔类型 true和false

2.引用数据类型(对象类型,类类型)
包含的类型有:
1.所有用class,abstract class,interface定义的类,抽象类和接口。
2.数组 int [] array = new int[10];

只要是使用了new关键字,那么就属于引用数据类型。

2.值传递
值传递适用于Java的那些数据类型
值传递适用于Java中的八大基本数据类型和String。

值传递的方式
值传递是将变量i的值拷贝一份存入到另一个变量score,此时在栈内存中就存在了两块独立
存储空间,分别存储了i和score,这时候对其中任意一个变量进行修改都不会影响到另外一个。
如果想要两边都是修改后的值,那么就只能在修改后,将值重新再赋值一次。
例如:在Sister函数中
public void changeAge(int age){
this.age=age;

this.age++;
System.out.println(name+"的年龄为"+this.age);
}
在Girl函数中
Sister sis=new Sister();
sis.getName("莉莉");
int i=18;
sis.changeAge(i);
Syetem.out.println(i);
输出结果:莉莉的年龄为19;
18;
可看出i的值赋给了this.age,在执行this.age后,this.age变为19;但i仍为18;这是因为i和age分别存储在不同的存储空间里,改变其中一个量的值并不影响另一个量的值。


3.引用传递
引用传递适用于Java的那些数据类型
引用传递适用引用数据类型。

引用传递的方式
引用传递是将对象名XX中存储的地址拷贝一份存入到XX2中,此时两个对象名就指向了同一个对象;现在适用其中任何一个对象名,来修改对象的属性值,那么另一个对象名的也会跟着改变(这就相当于1个人有两个名字)。

如:主函数中 Pet p=new Pet();
p.setName("小猫");
sis.havePet(p);
System.out.println("她原来有"+p.getName());

此时创建了一个对象p;并给了对象p的内容为“小猫”,下面执行函数havePet,函数havePet中的参数是p,即创建的对象的地址;此时p和sis两个对象指向了同一个地址,在执行语句

public void havePet(Pet pat){
pat.setName("小狗");
System.out.println(name+"有一只"+pat.getName());
}
后,sis对象里的内容为“小狗”;同时p里的内容也变成了“小狗”。这就是引用传递,把一个对象的地址复制一份给另一个对象,两个对象同时指向同一个存储空间,变就同时变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值