java 关于 String Integer 包装类 引用传递总结

首先让我们来看一段代码:

public static void main(String[] args)  {
	String name = "小明";
	changeName(name);
	System.out.println(name);
}

private static void changeName(String name) {
	name="小红";
}

执行结果为:小明

相信很多小伙伴会对这个结果产生质疑? 这是为什么呢?

Java的传递 其实在各大论坛上争论不休
一般有以下几种观念
1.基本类型是值传递,对象类型是引用传递
2.所有的传递其实都是值传递 传递的是拷贝的引用

本人更加倾向于第二种言论 以下是我个人的见解:
String 是一个类 ,不是基本数据类型, 传递的是拷贝对象的引用,所以在 第7行 changeName(String name)方法中,传递的 形参name 实际是拷贝的一份引用

此时的内存图为如下
在这里插入图片描述

当执行到第8行代码时:
name="小红";
实际上是把 拷贝的引用对象 name1 赋值为 “小红”,
网上很多回答都说 因为String 被final修饰了,所以每次给String赋值的过程都是new了一个新对象,事实真的如此吗?
让我们来复习一下 
被final 修饰的类仅仅表示该类是无法被任何其他类继承的,并没有其他限制
既然如此 那么凭什么说 每次给String赋值的过程都是new了一个新对象?
所以这个回答个人认为是不全面的

以下是我的答案:

因为在java中 就已经规定了 :字符串就是 String 的一个对象,“小明” , “小红” 就是 String 的一个对象 。那么每次重新赋值的过程 String name = “小红”;其实都是 把一个新的对象赋值给 name,相当于 new 了一个新的对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值