第一个说了算,还是最后一个

Updated: 2019-01-01

入门

程序中可以给同一个变量多次赋值,后一次赋值会覆盖前一次的值。

jshell> int n = 0;
n ==> 0

jshell> n = 1;
n ==> 1

坑!

可能你会有类似的经历:

你用 Bootstrap 或其他的 framework,但想改动 CSS 来调整页面样式。你明明在 HTML 中加上了 CSS 的链接,但样式没有丝毫的改变。

或者你下了一个最新的 JDK,在.bashrc中添加了JAVA_HOME,然后把它加入了PATH,但source之后which java仍然给你旧的 Java 版本。

进阶

在程序中重复赋值,无可争议的只有最后一个值会生效。

但在样式表或配置文件中,同一个属性或变量是可能有重复的,需要搞清楚到底是第一个说了算还是最后一个说了算。

CSS

CSS 中默认是最后一个说了算,比如之前定义了font-size,后面又定义了一次

h1 {
  font-size: 1.75rem;
}

h1 {
  font-size: 2rem;
}

只有最后一个会生效,也就是2rem。所以要保证自己写的 CSS 文件在 Bootstrap 等框架的 CSS 之后载入。

如果要强制不让后面的赋值覆盖,可以使用!important

h1 {
  font-size: 1.75rem !important;
}

h1 {
  font-size: 2rem;
}

.bashrc/.bash_profile

这里是第一个值说了算。所以当添加路径到PATH的时候,要保证新的路径放在最前面:

export JAVA_HOME=/path/to/jdk-x.x.x
PATH=$JAVA_HOME/bin:$PATH