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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗勇 中级黑马   /  2016-5-15 22:59  /  773 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗勇 于 2016-5-15 23:01 编辑

成员变量有默认值,局部变量不会自动赋值——这个我能理解
成员变量被final修饰且没有static的必须要显示赋值——这个不理解,什么叫显示赋值?为什么要显示赋值
  1. public class Variable {
  2.         void test () {
  3.                 int i;
  4.                 int j =8;
  5.                 if(j==i){//报错,局部变量不自动赋值,所以i没有值无法做判断。
  6.                         System.out.println("相等");
  7.                 }else{
  8.                         System.out.println("不相等");
  9.                 }
  10.         }

  11.         public static void main(String[] args) {
  12.                 Variable v =new Variable();
  13.                 v.test();//编译不通过。
  14.         }

  15. }
复制代码
  1. public class Variable {
  2.         int i;
  3.         void test () {
  4.                 int j =8;
  5.                 if(j==i){
  6.                         System.out.println("相等");
  7.                 }else{
  8.                         System.out.println("不相等");
  9.                 }
  10.         }

  11.         public static void main(String[] args) {
  12.                 Variable v =new Variable();
  13.                 v.test();//编译通过。成员变量有默认初始化值。
  14.         }

  15. }
复制代码



QQ截图20160515225806.png (14.35 KB, 下载次数: 5)

QQ截图20160515225806.png

1 个回复

倒序浏览
这个问题 我也犯过,我当时就觉得int i;就可以了 因为这个整数类型他会自动被系统默认复制为0的
然后每次用都会出错.
我说一下我的想法,仅供参考:
局部变量在站内存中, 他没有地址值,系统找不到他的地址值是不会给他赋值的
成员变量在类中,在堆内存中,它是有地址值的,系统会根据他的地址值来找到他的存储区域,会自动给他赋值为0;

不知道我的想法对不对.嘿嘿..
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马