标识符和变量有什么区别?

27

我对标识符有点困惑。在我的教材中,它说:"我们使用标识符来命名Java中的变量(以及许多其他内容)."

我不太确定这是什么意思。这是给一个变量分配一个...变量吗?是什么意思?

到目前为止,我的印象是:

int a, b, c; a = 2; b = 99; c = a + b;

变量名c是否是标识符?当说“使用标识符来命名变量”时,像intdoubleboolean这样的标识符是否用于对变量进行分类?请举一些例子。

15个回答

33
你可以将标识符看作变量的名称,不必过于担心。
例如:
int a;
a = 15;

在这个例子中,a是一个标识符,它指向具有相同名称的变量。如果a不是一个变量而是一个函数:
int a()
{
}

a();

那么a仍然是一个标识符,但它将标识一个函数。就像“Reena”既可以标识一个人,也可以标识某种非营利组织。


2
Reena作为个人和组织之间的良好类比。 - MCG
非常好的例子。 - user758077
一个标识符不仅仅是一个变量的名称,正如你在回答中稍后展示的那样,因此你的第一句话是误导性的。 - barlop

6

我同意GNU C的定义,即C语言中有5个标记:关键字、标识符、运算符、常量和分隔符。Java也是一样。

int不是标识符,因为它被定义为一个关键字。运算符被排除在有效标识符符号列表之外。常量只是值,但指代常量的名称是一个标识符。

基本上:任何“单词”(一组1个或多个有效标识符符号)只要不在关键字列表中就是标识符。在Java中,有效的标识符符号是Unicode字母、数字、美元符号和下划线。数字不能作为第一个符号。美元符号和下划线虽然有效,但不应该被用于除了多词常量标识符中作为分隔符之外的其他用途,例如:MY_MAGIC_NUMBER = 6


5

标识符就是变量的名称。因此,对于变量 c,标识符是实际文本 c,这只是您引用变量的方式。可能会出现(以后你会学到)您可以为同一变量拥有多个标识符的情况,就像现实生活中人可以有多个名字一样。

现在不要太担心这个问题,继续努力学习和关注更重要的内容,如循环、条件语句、类等。


同一个变量有多个标识符?我只见过在C++中这种情况。你可以有多个指向相同对象的引用,但对象不是变量。反之,在每种具有阴影,命名空间甚至仅仅是作用域的语言中,都可以有相同标识符的多个变量。 - Blaisorblade
标识符不仅仅是变量的名称,您应该给出标识符的定义。 - barlop

4

标识符是变量的名字,而变量则是存储数据的位置。变量指向内存位置,用于读取和修改数据。


标识符不仅可以保存变量,还可以保存常量,因此您的定义在第一句话中就是错误的。类的名称也是一个标识符。 - barlop

3

在Java中,标识符是给程序元素命名的名称,其中程序元素可以是包、类型(类、接口、枚举、注释)、字段(实例/静态变量)、枚举常量、注释类型元素、方法、局部变量和参数。实质上,标识符用于识别程序元素。

例如,在以下代码中,

package declarations;

public class A {

    private int value = 1;

    private enum SUITS {CLUB, DIAMOND, HEART, SPADE};

    public A(int val) {
        this.value = val;
    }

    public int doSomething() {
        int c = value + 10;
        return c;
    }
}

// declarations, A, value, SUITS, CLUB, DIAMOND, HEART, SPADE,
// A, val, value, val, doSomething, c, value, c are the 
// identifiers in order of their occurrence.

如果您引用了一个来源并在Java中包含了完整的标识符定义,那么您对标识符的定义可能会更好,此外,您还遗漏了常量。 - barlop

2

标识符就像任何用户定义函数的名称一样,例如:

int gcd(int,int);

这里的函数名gcd是一个标识符。

变量用于赋值,这些值可能会在执行过程中发生变化,例如:

int a,b;
int a=10;

在上面的两个表达式中,第一个声明了变量,第二个赋值为10。在这里,a和b是变量。

1
下次请使用代码格式。我现在已经编辑了你的答案。 - Jean-François Côté

1
我认为一个变量是一个定义的存储区域; 事实上,这是你在RAM中可以保存值的地方。一个变量标识符是你给那个区域的名称。
当然,标识符不仅可以命名变量。函数(具有输入/输出参数的代码包)也有一个名称:函数标识符。类型(值域)也有一个名称:类型标识符。类(具有函数成员的类型)有类标识符,依此类推。
例如,“4”是一个值。更进一步,它是一个整数。如果你想管理自己的整数,你需要一个存储区域来保存整数,一个名称来引用该存储区域,你需要定义你想要保存在该区域中的值的类型/领域,并且需要一个名称来指定和引用该类型。所以,你需要写一些像这样的东西:
int var;

如果Java解析器看到以下结构的句子:name name;,它知道您正在创建一个存储区域。第一部分指定该区域预期用于的值类型,唯一的指定方式是编写该类型的类型标识符,因为该类型本身是一个抽象概念(例如,int表示某个东西是整数的抽象概念)。
第二部分是您想要为该区域命名的名称,以便稍后使用,因为使用名称引用存储区域比使用其他任何方法更简单(例如,内存方向或其他任何内容;让语言为您管理)。

1
如果我理解正确的话,这似乎是一个过度工程化的例子(在考虑变量名称(标识符)时)。
// 变量定义
int myVariable = 42;
从技术上讲,42是变量(分配的值)。
myVariable是标识符(我们创建的名称来存储变量)。
我通常使用将标识符称为变量的通用思想,并且如果您想要更加技术化,可以区分“我们创建的存储变量的名称是'变量名称',存储在'变量名称'中的值是'变量值'”。

2
这个问题让我很感兴趣,因为它是一个简单的概念,但对于像我这样试图理解Java编程的更大概念的初学者来说,经常会感到困惑。所以我进行了一些调查,并找到了我认为是Java标识符的良好定义(参考:Kishori Sharan的《Beginning Java 8 Fundamentals》)。总结一下: 标识符只是Java程序中给类、方法、变量、文件等命名的技术术语。 - urso

0

标识符是Java中赋予事物的名称,包括变量、方法、类等。因此,从技术上讲,变量是标识符。 请参见:https://www.cs.umd.edu/~clin/MoreJava/Intro/var-ident.html

关于您对“我不太确定这是什么意思。这是像将一个变量分配给另一个变量吗?什么?”的困惑——> 正确的说法是:为变量分配一个“名称”(您想为变量取什么名字)。


0

标识符是代表变量或函数的单词,但变量是内存中存储数据的空间。例如:一旦您声明一个变量,如:int god;,单词god是标识符,int god;是声明的变量,用于输入整数数据。


你的回答是误导性的。 "int" 不是标识符,它是一个变量类型。在你的例子中,标识符是单词 "god",它也是一个同名的变量。"int god" 是一个声明 int 类型变量的语句。 - papacito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接