A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© MQ_H 中级黑马   /  2015-6-18 10:22  /  1800 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class  Test
{
        public static void main(String[] args)
        {
                String string = "Hello";
                test(string);
                System.out.println(string);
        }
        public static void test(String str)
        {
                str = "World";
        }
}

12 个回复

倒序浏览
本帖最后由 我是隔壁老王呀 于 2015-6-18 11:01 编辑

http://www.cnblogs.com/lixiaolun/p/4311863.html
回复 使用道具 举报
上面解释的好仔细。
回复 使用道具 举报
你传递的是个副本而非引用= ="虽然把值依旧传到了test()里,但是当该方法走完也就自动销毁了= =所以才会打印出hello= ="
回复 使用道具 举报
string 没有变
str变了
  1. public class test1 {
  2.         public static void main(String[] args){
  3.                 Cat c=new Cat();
  4.                 c.age=1;
  5.                 method(c);
  6.                 System.out.println(c.age);
  7.         }
  8.         public static void method(Cat cat){
  9.                 cat.age=5;       
  10.                
  11.         }
  12. }
  13. class Cat
  14. {
  15.         int age=2;
  16. }
复制代码
引用传递,内存地址没变所以,age改变了。


无标题.png (82.06 KB, 下载次数: 71)

无标题.png
回复 使用道具 举报 1 0
楼上正解
回复 使用道具 举报
hi潘 中级黑马 2015-6-18 15:19:35
7#
因为你定义的string形式是:String string = "Hello",string是字符型常量被放到常量池中。
String特点是不变的,也就是说你以String string = "Hello"形式定义,string就指向“Hello”
你再给他赋值是,string就会指向你最后赋值的那个值不在指向hello
回复 使用道具 举报
连看了几个链接,涨知识了
回复 使用道具 举报
看着好复杂,小白正在努力中
回复 使用道具 举报
我来献下丑:我觉得是这样的,首先,我们得明白String类型变量一直初始化是不能改变的
首先有个变量string指向hello,然后用Test方法,有str也指向hello(方法传值),然后str变量的指向改变了,是指向wolrd了,但是string还是指向hello,你打印string,当然是hello了
一点浅见,不知道对不对
回复 使用道具 举报
上面的 已经说的多了    数据进来   执行完  就弹站了  并没有改变值
回复 使用道具 举报
看看学习
回复 使用道具 举报
看完上面的链接就懂了。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马