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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public static void main(String[] args){
                String s1 = “abc”;
                String s2 = “xyz”;
show(s1,s2);
System.out.println(s1+”-----”+s2);
}
static void show(String s1,String s2){
         s1 = s2+s1+”Q”;  
    s2 = “W”+s1;   
}

20 个回复

倒序浏览
abcxyzQ-----WabcxyzQ            

点评

恭喜中奖  发表于 2014-9-4 09:08
回复 使用道具 举报
abc-----xyz
回复 使用道具 举报
龙帅 来自手机 中级黑马 2014-9-3 13:23:48
板凳
abc-----xyz    show函数并没有对主函数里的s1 s2产生赋值操作
回复 使用道具 举报
龙帅 发表于 2014-9-3 13:23
abc-----xyz    show函数并没有对主函数里的s1 s2产生赋值操作

没有进行赋值操作? 我给改了下你看看, 也没进行赋值操作
public static void main(String[] args) {
                String[] s1 = new String[]{"abc"};
                String s2 = "xyz";
                show(s1, s2);
                System.out.println(s1[0] + "-----" + s2);
        }

        static void show(String []s1, String s2) {
                s1[0] = s2 + s1[0] + "Q";
                s2 = "W" + s1;
        }

点评

楼主给力!这题目很典型,尤其放在一起出,可以坑死不少人哪!!  发表于 2014-9-4 09:17
回复 使用道具 举报
王凯路路 发表于 2014-9-3 13:34
没有进行赋值操作? 我给改了下你看看, 也没进行赋值操作
public static void main(String[] args) {
                St ...

好奇怪啊,好像对数组的操作就可以保存,变量就不行。

昨天我还发现,如果单独写一个交换变量的方法,是无法用来交换变量的。

请问这是怎么回事,我都一知半解的。。。
回复 使用道具 举报
龙帅 发表于 2014-9-4 09:05
好奇怪啊,好像对数组的操作就可以保存,变量就不行。

昨天我还发现,如果单独写一个交换变量的方法,是 ...

我理解了,原因是这样的:
1、字符串在内存中并不会被改变,假如对字符串变量赋值,改变的只是变量的指向。
2、字符串数组,数组中存储的都是指向对应字符串的引用地址。

由此可知:

楼主的帖子,对字符串s1做的任何操作由于没有回传,所以全部失去意义。因为被操作的并不是s1字符串,而是show函数中s1字符串的指向。

楼主的报纸中,对数组的操作,会产生效果,其原因同样如此。
比如毕老师的数组间的元素换位(交换),并没有返回值,但能起效果。

究其原因为,main函数将数组的引用地址给了show函数的s1,但指向的都是同一个数组对象,对同一个对象操作自然会影响对象本身。
回复 使用道具 举报
字符串对象一旦创建就不可修改,shou()方法只是又生成了新的字符串对象,而且只是在方法内部起作用,是这样吗?

点评

完全正确,不过黑马兄可以看看楼主在报纸中发的,也挺有意思。  发表于 2014-9-4 09:23
回复 使用道具 举报 1 0
OCTSJimmy 发表于 2014-9-4 09:16
我理解了,原因是这样的:
1、字符串在内存中并不会被改变,假如对字符串变量赋值,改变的只是变量的指向 ...

感谢讲解,学到了
回复 使用道具 举报
OCTSJimmy 发表于 2014-9-4 09:16
我理解了,原因是这样的:
1、字符串在内存中并不会被改变,假如对字符串变量赋值,改变的只是变量的指向 ...

如果交换时,只交换值,而不是交换数组,值类型是int型的,为什么会出现没法交换的现象?
回复 使用道具 举报
不注意很容易被坑啊,说明我还基础不够扎实{:3_66:}
回复 使用道具 举报
安茹黑马 发表于 2014-9-4 09:31
如果交换时,只交换值,而不是交换数组,值类型是int型的,为什么会出现没法交换的现象? ...

值类型和引用类型的问题,String是个特殊的引用类型.show方法当中s2跟main方法的s2不是同一个,重新为show方法创建了Wxyz这个对象对main方法当中的没有影响,s1是引用类型,show方法当中更改了s1数组当中的数据,main方法当中也会更改.你说的int类型是值类型,跟String是一样的.如果在swap方法当中交换了,是不会影响原先的值的
回复 使用道具 举报
Darkhorse′Xa 发表于 2014-9-4 09:39
值类型和引用类型的问题,String是个特殊的引用类型.show方法当中s2跟main方法的s2不是同一个,重新为show ...

谢啦,学习了
回复 使用道具 举报

互相学习
回复 使用道具 举报
龙帅 发表于 2014-9-4 09:05
好奇怪啊,好像对数组的操作就可以保存,变量就不行。

昨天我还发现,如果单独写一个交换变量的方法,是 ...

我只知道引用类型的变量, 不需要复制操作也可以改, 因为他们是改的堆内存中的,基本数据类型在栈内存开辟空间, 所以改不了,只能重新赋值.
数组是引用类型的, 所以不需要赋值操作, String的话, 大概是因为他是一个特殊的类吧 ?
回复 使用道具 举报
OCTSJimmy 发表于 2014-9-4 09:16
我理解了,原因是这样的:
1、字符串在内存中并不会被改变,假如对字符串变量赋值,改变的只是变量的指向 ...

原来是这个样子   :o    看来我还是太肤浅了....唉.
回复 使用道具 举报
abc+”-----”+xyz
回复 使用道具 举报
曾经中招过……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马