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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王琪 中级黑马   /  2014-2-27 21:14  /  1525 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王琪 于 2014-2-28 01:34 编辑

  1. import java.util.*;
  2. public class Text {
  3.         static void fun(String s){
  4.                 s="!";
  5.         }
  6.         public static void main(String[]args){
  7.                 String s="*";
  8.                 fun(s);
  9.                 System.out.println(s);
  10.         }
  11. }
复制代码

不能通过函数改变String吗?
嗯 ..我是想通过 s="1"把吃的内容直接f赋值给传来的s 的 是不是要用高级for 循环另外定义一个函数啊?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

11 个回复

倒序浏览
  1. import java.util.*;
  2. public class Text {
  3.         static void fun(String s)这里你接受了一个s 这个s代表的是*
  4. {
  5.                 s="!";//这句话的意思就是  *=! ;你这里都定义错了
  6.         }
  7.         public static void main(String[]args){
  8.                 String s="*";
  9.                 fun(s);
  10.                 System.out.println(s);
  11.         }
  12. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
我是想比如 s保存的是地址 s="12345"传进函数里 再通过重新赋值s=“7777”最后输出7777啊?
回复 使用道具 举报
本帖最后由 asvsass 于 2014-2-27 22:10 编辑

这两个 S 都市在栈内存中的S 所以他们不是同一个S 只是名字一样而已 你把名字换换就一目了然了
import java.util.*;
public class String1 {
         static void fun(String s){
                 s="abc";
         }
         public static void main(String[]args){
                 String s1="1";
                 fun(s1);
                 System.out.println(s1);
         }
}
你调用完fun() fun() 函数结束 s值就释放了 你输出的S是主函数自己的局部变量的这个s

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
String s="*"; 那这个s就是常量了
fun(s);是不会改变s的值的,因为是值传递。
通过函数改变String可以,把String定义成对象,传引用到方法中就可以。
后面的问题没懂,这代码中有什么吃的内容和循环么。。。看的有点晕

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
  1. public class Text {
  2.         static void fun(String str){//改变一下参数名称以作区分
  3.                 str="!";
  4.         }
  5.         public static void main(String[]args){
  6.                 String s="*";
  7.                 fun(s);//把s作为参数传递给fun函数,只是将s的值"*"赋给了fun函数的形参str,方法体的运行与s毫无关系
  8.                 System.out.println(s);
  9.         }
  10. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
  1. package com.mth.test;

  2. /**
  3. *
  4. * @ClassName: Text
  5. * @Description: TODO(类的作用)
  6. * @author mth 75100313@qq.com
  7. * @date 2014-2-27 下午10:11:13
  8. *
  9. */

  10. public class Text {
  11.     static String fun(String s1) {//参数s局部变量
  12.         s1 = "!";        //要想改变你传进来变量的值 必须返回
  13.         return s1;
  14.     }

  15.     public static void main(String[] args) {
  16.         String s = "*";
  17.         //s接受一下函数的返回值
  18.         s=fun(s);
  19.         System.out.println(s);
  20.     }
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
flying 中级黑马 2014-2-27 22:40:10
8#
  1. public class Text {
  2.         static String fun(String s){
  3.                 s="!";
  4.                 return s;
  5.         }
  6.         public static void main(String[]args){
  7.                 String s="*";
  8.                 s=fun(s);
  9.                 System.out.println(s);
  10.         }
  11. }
复制代码

传进去的是字符串"!"在内存中的地址
如果想要输出 ”!“
只要将“!”的地址赋值给s就行了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
1、直接输出对象其实是输出对象的字符串表现形式,即调用对象的toString方法。
回复 使用道具 举报
2、由于所有对象有字符串表现形式,所以定义在了Object中。默认返回的格式:类名@哈希值 = getClass().getName() + '@' + Integer.toHexString(hashCode())。3、String类覆盖了toString方法,建立自己特有的内容,输出String类对象会输出该对象的内容。4、你上面代码运行完s应该是等于*吧,所以输出的是*。我记得是这样的,第一次回复有点乱,见谅

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
首先这个代码有问题:
  1:定义一个方法, 首先要确定返回值类型,你这个应该是返回String类型;参数是String s;但你的变量名起的不太合理,容易搞混.
  2:根据"问题1:"对于非void类型的就要返回,即执行结果应该交个调用者处理.返回的要接收,

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王琪 于 2014-2-28 01:24 编辑

谢谢大家,我发了一个总结但字数太多了不让回复
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马