= 和 == 有啥区别?

Posted

技术标签:

【中文标题】= 和 == 有啥区别?【英文标题】:What is the difference between = and ==?= 和 == 有什么区别? 【发布时间】:2015-03-26 10:22:03 【问题描述】:

=== 有什么区别?我发现了双等号允许我的脚本运行而一个等号产生错误消息的情况。我什么时候应该使用== 而不是=

【问题讨论】:

= 是赋值,== 是逻辑比较 如果您遇到困难,这也是帮助页面。 help("=")and help("==") 【参考方案1】: (=) 是 赋值 运算符,而 (==) 是 等于 运算符。 (=) 用于从右到左分配值,而 (==) 用于显示值之间的相等性。

例子:

$test = 1;
if($test=2)
echo "Hello";


if($test==2)
echo "world";

//The result is Hello because = is assigning the value to $test and the second condition is false because it check the equality of $test to the value 2.

我希望这会有所帮助。

【讨论】:

【参考方案2】:

用最简单的说法,以这两行代码为例:

1) x = 10 2) x == 10

第一行 (x = 10) 的意思是“我命令 x 等于 10。”

第二行 (x == 10) 的意思是“我在问这个问题,x 等于 10 吗?”

如果你先写“x == 10”,它会给你一个错误信息,告诉你没有找到x。

如果你写“x = 10”,这会将 x 存储为 10。

在你写完“x = 10”之后,如果你写了“x == 10”,它会响应“TRUE”,就像“是的,x 确实等于 10,因为你让 x 等于 10”。但是,如果您写“x == 11”或“x == 12”或 x == 10 以外的任何值,那么它将响应“FALSE”,如“不,x 不等于 11 或 12 或 10 以外的任何值” ,因为你让 x 等于 10。”

【讨论】:

【参考方案3】:

= 的含义取决于上下文。 == 始终用于测试相等性。

=可以

    在大多数情况下用作赋值运算符 <- 的替代品。

    > x = 10
    > x
    [1] 10
    

    用作键值对的分隔符,用于在函数调用中为参数赋值。

    rnorm(n = 10, mean = 5, sd = 2)
    

由于上述 2.,= 在所有情况下都不能用作<- 的直接替代品。考虑

> rnorm(N <- 10, mean = 5, sd = 2)
 [1] 4.893132 4.572640 3.801045 3.646863 4.522483 4.881694 6.710255 6.314024
 [9] 2.268258 9.387091
> rnorm(N = 10, mean = 5, sd = 2)
Error in rnorm(N = 10, mean = 5, sd = 2) : unused argument (N = 10)
> N
[1] 10

现在有些人会认为rnorm(N &lt;- 10, mean = 5, sd = 2) 编程不佳,但它是有效的,您需要注意=&lt;- 之间的区别进行分配。

== 总是用于相等性测试:

> set.seed(10)
> logi <- sample(c(TRUE, FALSE), 10, replace = TRUE)
> logi
 [1] FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
> logi == TRUE
 [1] FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
> seq.int(1, 10) == 5L
 [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE

不过,请注意==,因为它实际上意味着完全等于,并且在涉及浮点运算的计算机上,您可能无法得到您期望的答案。比如来自?'=='

> x1 <- 0.5 - 0.3
> x2 <- 0.3 - 0.1
> x1 == x2                           # FALSE on most machines
[1] FALSE
> identical(all.equal(x1, x2), TRUE) # TRUE everywhere
[1] TRUE

其中all.equal() 测试相等性,允许由于精度/浮点运算丢失而产生一些模糊性。

【讨论】:

我认为问题的出现是由于子集和类似函数:假设有一个数据集,其中国家是“大陆”列之一。下面的代码将返回一个 ampty data.frame: ``` Asia 【参考方案4】:

= 基本上是赋值 (&lt;-) 的同义词,但最常用于将值传递给函数。

== 是一个相等性测试

【讨论】:

以上是关于= 和 == 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

java中接口和类有啥区别java中接口和类有啥区别

Java 非堆内存和栈内存有啥区别?它们是不是相同,如果不同,它们之间有啥区别?

LMS和NLMS有啥区别

退还跟退回有啥区别?退回和退还有啥不同

VBS和JAVA和C++,有啥区别,有啥差距

WebApi和MVC有啥区别