黑马程序员技术交流社区

标题: 关于java赋值的问题(完成) [打印本页]

作者: 王琪    时间: 2014-2-27 21:14
标题: 关于java赋值的问题(完成)
本帖最后由 王琪 于 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 循环另外定义一个函数啊?

作者: yekong262    时间: 2014-2-27 21:40
  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. }
复制代码

作者: 王琪    时间: 2014-2-27 21:58
我是想比如 s保存的是地址 s="12345"传进函数里 再通过重新赋值s=“7777”最后输出7777啊?
作者: asvsass    时间: 2014-2-27 22:00
本帖最后由 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

作者: 乔青山    时间: 2014-2-27 22:06
String s="*"; 那这个s就是常量了
fun(s);是不会改变s的值的,因为是值传递。
通过函数改变String可以,把String定义成对象,传引用到方法中就可以。
后面的问题没懂,这代码中有什么吃的内容和循环么。。。看的有点晕
作者: 我要的幸福呢    时间: 2014-2-27 22:08
  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. }
复制代码

作者: 75100313    时间: 2014-2-27 22:13
  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. }
复制代码

作者: flying    时间: 2014-2-27 22:40
  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就行了

作者: 牛头人图腾    时间: 2014-2-27 22:49
1、直接输出对象其实是输出对象的字符串表现形式,即调用对象的toString方法。
作者: 牛头人图腾    时间: 2014-2-27 22:57
2、由于所有对象有字符串表现形式,所以定义在了Object中。默认返回的格式:类名@哈希值 = getClass().getName() + '@' + Integer.toHexString(hashCode())。3、String类覆盖了toString方法,建立自己特有的内容,输出String类对象会输出该对象的内容。4、你上面代码运行完s应该是等于*吧,所以输出的是*。我记得是这样的,第一次回复有点乱,见谅
作者: 位俊鹏    时间: 2014-2-28 00:36
首先这个代码有问题:
  1:定义一个方法, 首先要确定返回值类型,你这个应该是返回String类型;参数是String s;但你的变量名起的不太合理,容易搞混.
  2:根据"问题1:"对于非void类型的就要返回,即执行结果应该交个调用者处理.返回的要接收,
作者: 王琪    时间: 2014-2-28 01:22
本帖最后由 王琪 于 2014-2-28 01:24 编辑

谢谢大家,我发了一个总结但字数太多了不让回复





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2