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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Test1 {
        public static void leftshift(int i, int j) {
                   i+=j;
        }
        public static void main(String args[]) {
                int i = 4, j = 2;
                leftshift(i, j);
                System.out.println(i);
        }
}
我是基础班的学生,请大神详细的解析。

33 个回复

倒序浏览
这个是方法特性的时候会讲,传入的数值运算完就被放弃了,没有保存,可以这么理解,在leftshift方法上以及方法内,i和j都是局部变量,超出这个范围就没有了
回复 使用道具 举报
你的public static void leftshift(int i, int j) {                     i+=j;         } void根本就没有返回值,leftshift(i,j);就是没有一样的效果
回复 使用道具 举报
linjian931219 来自手机 中级黑马 2015-7-3 23:48:56
板凳
gongyanfa123 发表于 2015-7-3 23:10
public class Test1 {
        public static void leftshift(int i, int j) {
                   i =j;

你调用函数的时候,用了void类型,而void是没有返回值的,左右相加赋给左边,但没有返回值,但你定义了inti =4.所以传出的值还是它本身。把leftshift函数的返回值类型改成int应该就行了
回复 使用道具 举报
楼上正解
回复 使用道具 举报
少年 你要让你的函数和主函数产生联系 要么直接在函数内打印 要么用返回值返回 不然 两个函数各算各的
回复 使用道具 举报
leftshift方法里面的i和主函数中的i只不过同名而已,这两者其实没有什么关系的,就像北京有个张三,上海有个张三,你给了北京那个张三100万,但是上海的张三还是个穷鬼啊
回复 使用道具 举报
因为i是局部变量,而不是全局变量,所以你即时调用leftshift(i,j)函数后,在public static void leftshift(int i, int j) {                     i+=j;         System.out.println(i); } 中i的值是6,而在public static void main(String args[]) {                  int i = 4, j = 2;                  leftshift(i, j);                  System.out.println(i);          } 中i的值仍然是4.
回复 使用道具 举报
  1. class Test1 {
  2.     public static int leftshift(int i, int j) {
  3.               return  i=i+j;
  4.     }
  5.     public static void main(String args[]) {
  6.             int i = 4;
  7.             int j = 2;
  8.             System.out.println(leftshift(i, j));

  9.     }
  10. }
复制代码

你要的6.改一下你就知道了为什么了
  1. class Test1 {
  2.     public static int leftshift(int a, int b) {
  3.               return a=a+b;
  4.     }
  5.     public static void main(String args[]) {
  6.             int i = 4;
  7.             int j = 2;
  8.             System.out.println(leftshift(i, j));
  9.             System.out.println(i);
  10.     }
  11. }
复制代码
回复 使用道具 举报
传值 传地址的问题
回复 使用道具 举报
class OperationDemo
{
      public static int leftshift(int i, int j) {
                   i+=j;
                                   return i;
        }
        public static void main(String args[]) {
                int i = 4, j = 2;
                i=leftshift(i, j);
                System.out.println(i);
        }
}
这就可以了
回复 使用道具 举报
leftshift返回值类型是void,没有具体返回值,所以i=4
回复 使用道具 举报
学习了                       
回复 使用道具 举报
方法的返回值为空 调用之后还是原来的
回复 使用道具 举报
因为传递的是基本数据类型的值哦。
回复 使用道具 举报
(个人理解)int定义的对象的值存在栈中,所以参数得到的只是值而已,如果用存在堆中的对象,那么参数得到的就是地址
回复 使用道具 举报
如果局部变量有  I类型  那么就会在局部变量 来找这个I  ;main 是一个主方法  ,所以打印的是I
回复 使用道具 举报
巴拉森 发表于 2015-7-5 22:24
如果局部变量有  I类型  那么就会在局部变量 来找这个I  ;main 是一个主方法  ,所以打印的是I ...

如果局部方法有  I类型  那么就会在局部方法 来找这个I  ;main 是一个主方法  ,所以打印的是I
回复 使用道具 举报
test1方法没有返回值,在主函数中不能收到i的返回值,所以在主函数中定义i=4,输出就是4
回复 使用道具 举报
这个是方法特性的时候会讲,,在leftshift方法上以及方法内,i和j都是局部变量,超出这个范围就没有了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马