5.基本类型引用类型传递
具体代码如下:
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Data
class Person {
private int age;
private String name;
}
public class TestTransferValue {
public void changeInt(int age) {
age = 30;
}
public void changePerson(Person person) {
person.setAge(30);
}
public void changeString(String str){
str="你好";
}
public static void main(String[] args) {
//重点1:更改基本类型的值--->输出的竟然是18而不是30
TestTransferValue testTransferValue = new TestTransferValue();
int age=18;
testTransferValue.changeInt(age);
System.out.println("int---->"+age);
//重点2:修改引用类型的值--->输出修改以后的值
Person person = new Person(18,"吴孟达");
testTransferValue.changePerson(person);
System.out.println("person---->"+person);
//重点3:修改String---->输出的仍是吴孟达
String str="吴孟达";
testTransferValue.changeString(str);
System.out.println("String--->"+str);
}
}
输出:
int---->18
person---->Person(age=30, name=吴孟达)
String--->吴孟达
int类型的传值(注意并没有返回值,只是修
int类型的传值(注意并没有返回值,只是修改其传入的值)
public void changeInt(int age) {
age = 30;
}
重点理解:基本类型的值是存储在各自的线程栈中(线程的工作内存)
引用类型的值
public void changePerson(Person person) {
person.setAge(30);
}
重点理解:局部变量的引用类型:对象名称存放在线程栈中(保存堆中对象的内存地址),具体对象存放在堆中
传递String
public void changeString(String str){
str="你好";
}
重点:字符串常量池的存在(jdk版本号<=1.6字符串常量池在方法区,>=1.7在堆区)
出现str="你好";会直接在常量池创建一个新的字符串"你好",并返回字符串地址,即这两个引用已经没有任何关系
所以main方法输出的是自己的引用!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!