美文网首页
变量的六个属性

变量的六个属性

作者: 天黑北风吹 | 来源:发表于2016-07-11 17:10 被阅读43次

变量 是机器存储单元在语言中的抽象。它是编程语言最重要的概念之一。

变量有6个属性(或者说从6个方面去描述变量)

名字/别名
地址/左值
值/右值
类型
作用域
生存期/生命期

1 名字/别名

名字的概念在 名字/标识符 已经提到。
当多个名字访问的都是同一个存储地址时(或者说多个名字都 绑定/约束 于同一个存储地址),可称这些名字为 别名。
使用别名有损于程序的可读性,然而却很难从一门语言中完全消除。如下

Java

public static void main(String[] args) {   
    String name = "jack";
    String alias = name;   
    name = "lily";
     
    System.out.println(name);
    System.out.println(alias);
}

Javascript

var name = 'jack';
var alias = name;
name = 'lily';
alert(name);
alert(alias);

可以看到变量alias作为name的别名,都指向同一个地址,值为“jack”。但当name发生变化后,alias却全然不知。
许多语言中,子程序的参数也可产生别名现象。

2 地址/左值

计算机中所有的数据都是存放在存储器中的,一般把存储器中的一个字节称为一个存储单元。为了正确的访问这些
存储单元,需要为每个存储单元编个号。根据编号即可准确的找到该内存单元。内存单元的编号就称为 地址 。

在许多语言中,程序中同一个 名字/标识符 可以在不同的时间,与不同的 地址 关联/绑定 。
变量的地址有时也称为变量的左值(left value),或许是因为各种语言中变量经常位于赋值语句的左边。

String name = 'jack'; // Java
var name = 'jack'; // JavaScript

又或许在地址图上编号总是位于左边,值总是在右边

2011030114154615.png

名字 与 地址 的 关联/绑定 后续会提到。

3 值/右值

变量的值是指与这个变量相关联的存储单元的内容。可以将计算机的存储单元想象成抽象的单元,而非物理单元。
现代计算机多数以字节为单位,一个字节有八位长度。
变量的值有时也称为变量的右值(right value),因为变量常被用于赋值语句的右边(参考左值)。

4 类型

类型 决定了变量可以存储的值的范围,且定义了该类型的操作集合。
如Java中int类型占4个字节,取值范围是-2147483648~2147483647,对其可进行加减乘除及取模运算。

5 作用域

作用域是指变量的可见性问题。即决定了那些子过程和函数过程可访问该变量。
各种语言的划分也不同,如有的变量作用域分为:局部、窗体、块和全局。有的则只有局部、全局之分。
如C、C++、Java中有块级作用域,JavaScript中则没有 。

6 生存期/生命期

生存期/生命期 指的是何时创建,何时释放。生存期/生命期 与 存储绑定 密切相关。

如在Java中的一个方法中声明的一个变量,该变量在方法执行时创建,执行后释放。

public static void main(String[] args) {
    String name = "jack";  
    System.out.println(name);
}

又如JavaScript中

function func(){
    var name = 'jack';
    alert(name);
}
func();

func执行后变量name就释放了。

但 闭包 的情况可延长局部变量的生命期。

var getName;
function func(){
    var name = 'jack';
    getName = function(){
        return name;
    }
}
func();

相关文章

  • 变量的六个属性

    变量 是机器存储单元在语言中的抽象。它是编程语言最重要的概念之一。 变量有6个属性(或者说从6个方面去描述变量) ...

  • 属性

    属性 存储属性 计算属性 属性观察器 全局变量和局部变量 类型属性 存储属性 FixedLengthRange的实...

  • iOS 基础知识总结 更新中...

    属性 属性与成员变量之间的关系 属性对成员变量扩充了存储方法 属性默认会生成带下划线的成员变量 声明了成员变量不会...

  • swift - 属性

    /*• 存储属性• 计算属性• 属性观察器• 全局变量和局部变量• 类型属性*/

  • 面向对象

    对象:某一个具体的东西 类:类别,一类东西 变量和属性变量就是属性,属性就是变量,只是叫法不同变量是自由的属性是属...

  • 2020-04-05 KVC

    课程引入:成员变量、实例变量、属性,区别是什么?---分类不能添加实例变量 成员变量 -- 实例变量 -- 属性 ...

  • 变量、属性

    一、数字加单引号和不加单引号结果都一样 var a=12; var a=‘12’...

  • 开发问题笔记(十八)

    目录 1.iOS中各种变量的区别(成员变量、属性变量、局部变量..) 1.iOS中各种变量的区别(成员变量、属性变...

  • iOS 属性字段copy讨论

    1.局部变量的 retainCount==1;属性变量的 retainCount == 2;当指针置空时,属性变量...

  • Python实例变量和类变量

    Python实例变量和类变量 类变量(类属性): 类变量属于类所有,所有实例共享一个变量 实例变量(实例属性) 实...

网友评论

      本文标题:变量的六个属性

      本文链接:https://www.haomeiwen.com/subject/judjjttx.html