怎么理解变量(变量是什么)

  • Post author:
  • Post category:其他

任何一门高级语言在讲解语法的时候必会讲变量。仔细想一想是不是这样的呢?本文通过java代码进行讲解,如果看不懂java代码不影响的哈。都是很简单的java语句,看单词的意思就可以明白的那种。

我们怎么理解变量呢?或者说变量是什么呢?

我们可以这样理解:计算机的程序的运行的实质就是一系列的运算。我们可以简单的把这种运算理解成+ – * / 四则运算(描述不准确,但是我们可以这样理解)。

举个例子:

想一想我们在进行1230*235这个运算的时候我们人是怎么做的呢?我们是不是先找一张草稿纸,在上面写上1230 * 235 然后进行运算。计算机是人发明的所以肯定是让它以我们人类的方法来进行运算的。计算机在进行1230*235这个运算的时候做的第一件事情就是:找一张草稿纸。草稿纸代表什么?代表存储。我们在草稿纸上写1230*235的目的是存储1230 235这两个数。有的人可能会说我不用草稿纸就可以了啊 我可以心算啊。但是弟弟啊,你在进行心算的时候是不是知道自己在算什么呢?你为什么知道自己在算1230 * 235呢?还不是你的大脑此时充当了一张草稿纸把你这两个数存在了大脑里面?

所以:在计算之前我们需要做的事情就是先把需要运算的数字存储起来,那么我们存到哪里呢?我们存到我们的变量里面去。变量你可以理解成一个存储空间的名称。就像stack和heap一样就是一个对某一种存储空间的名称。

我们在写成代码的时候就应该这样写:

        int a = 1230;
        int b = 235;
        int mult = a * b;

可能有些弟弟会这样写:

       int mult = 1230 * 235;

这样写的话是不是以为我们没存储1230 和 235呢?我们还是存储了这两个数字的只不过是不存在我们自定义的变量中,而是存到另外一个存储区域去了。

上面的例子所讲的变量都是基本类型的变量。对于引用类型的变量理有一些不同,因为引用类型变量存储的并不是一个用来运算的值,而是一个地址。真正的用来运算的值存储在另外一个地方我们称之为堆(heap)。

我们来看一下这个例子:

        String s1 = new String("Lujipeng");
        String s2 = new String("Lujipeng");
        String s3 = s1;
        System.out.println("s1 == s2:"+(s1 == s2));  //false
        System.out.println("s1 == s3:"+(s1 == s3));  //true

因为s1和s2变量存储的是地址,s1存储的第一个Lujipeng字符串的地址,s2存储的是第二个Lujipeng字符串的地址。所以s1 == s2 是false的。s3 == s1是true的。此时可能就会有弟弟说:我不喜欢这个结果,明明就是s1和s2都是Lujipeng为什么就不是相等的呢?真是让我无法接受啊。没事java开发者是很人性的,他们提供了equal方法让你自己来定义object(类类型变量)到底怎么样才是相等。所以我们可以直接override一下string类类型的equal方法就可以了。更加人性化的是java开发者已经给我们override了。我们看一下string类型中的equal方法:

作者:知乎用户
链接:https://www.zhihu.com/question/26872848/answer/34364603
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}

所以:

        System.out.println(s1.equals(s2)); //true

但是我们要注意上面那个例子中string类型变量的初始化。因为string类型可以说是一个历史遗留问题,对我们string的初始化按照这种方式初始化的时候结果会不一样的哦:

        String s1 = "Lujipeng";
        String s2 = "Lujipeng";
        String s3 = s1;
        System.out.println("s1 == s2:"+(s1 == s2));
        //true 这里会变成true,因为按照上面的方法初始化的时候系统会先在堆中存储一个Lujipeng,然后让s1和s2指向这个Lujipeng。即使
        //你有s3 s4....sn如果按照上面这张方法初始化的话他们都是指向一个Lujipeng。
        System.out.println("s1 == s3:"+(s1 == s3));  //true

如果你被基本类型变量和引用类型变量的理解搞混了那么我就引用一下《c++ primer plus 5th》中的一句话吧:变量提供一个具名的,可供程序操作的存储空间。

变量构成

我们先来回想一下变量的定义。是不是一般都是这种类型:
        int i = 6;

int – 变量的数据类型;i – 变量名;6 – 变量存储的值。这三个可以称为一个变量必不可少的要素(你见过那个变量缺少过这三个要素吗?)。但是你可能会问为什么一个变量必须要有这几个要素呢?我们来探讨一下吧!

数据类型(Date Type)

数据(Date)是被分门别类了的,每类数据有不同的运算法则。

In computer science and computer programming, a data type or simply type is a classification of data which tells the compiler or interpreter how the programmer intends to use the data. Most programming languages support various types of data, for example: realinteger or Boolean. A data type provides a set of values from which an expression (i.e. variable, function …) may take its values. The type defines the operations that can be done on the data, the meaning of the data, and the way values of that type can be stored.[1][2] 

                                                       Date Type–维基百科

如:1.234 是一个小数类型的数据值(value),1 是一个int类型的数据值(value),2147483648是一个long类型的数据值(value),Lujipeng 是一个string类型的数据值(value)。 1.234+1.1234 和 1+1 和 Lujipeng+Lujipeng虽然都是+运算但是运算的过程是天壤之别的。
所以数据不能被简单的存储到内存中就可以了,而是要对不同的数据区别对待。但是我们都知道不管你是小数还是整数在计算机中都是0101的二进制代码,那我们怎么知道我们存储的0101是int还是float呢?——-数据类型来注明。
所以我们要处理相应类型的数据必须通过相应类型的变量来存储这样计算机的运算才会达到我们预期的结果。string s1=“1”; string s2=“2” ;s1+s2是不会等于3的!!!!!

变量名

 这个的存在就很显而易见了。变量名相当于一个接口,通过变量名来操纵一个存储空间(变量)。比如前面的int i = 6;这一条语句它进行了以下操作:
 
1.在栈中申请一个存储空间,这个申请到了的存储空间就是我们说的变量。并且给这个存储空间命名为a
2.a = 2,即通过a这个变量名来操纵存储空间,给变量名为a的存储空间存储一个数据2。

值(value)

变量是存储空间,变量中存储的东西就是值。

版权声明:本文为NEXTLJP原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。