先秦时期姓氏是不同的概念。
姓是用来说明血缘关系的,说明你祖上是谁,你婚配时要规避的对象。
氏是用来表明身份的,指出你的封邑或居住地,说明你的身份地位。
所以,男性多称氏,表明自己身份地位;女性多称姓不称氏,表明适合或不适合与谁婚配。
天子、诸侯至尊不称氏(如果诸侯先得氏后得国则例外,比如赵国就是嬴姓,和秦同姓),贱民地位卑下不称氏(没什么地位身份,称什么氏呢)。比如夏朝姓姒,只有天子嫡系这一支称姒姓,其他分支都有了氏,不再称姓。所以大禹后代虽多,姒姓却极少。殷商子姓,也是如此;周朝姬姓,子孙虽多,姬姓很少,也是因此。
也不是每一个贱民都有姓。最开始姓并不是普及到每一个人的,也是有比较高身份地位的人才有姓,比如黄帝25子,其中14个得姓(12个姓),后来得姓的人越来越多,都春秋战国时估计逐渐普及了,没有姓的也冒一个姓(毕竟姓不再代表身份地位,也没人去刻意维护了)。
战国末期和秦汉以后,平民也可以通过军功等方法晋升社会地位,用来标注身份地位的“氏”已经不再重要了。所以,秦汉以后就姓氏不分了,很多人就把氏当作姓了。
姓标明血统,不能随意改变;氏却是可以改变的。比如章姓原来是姜子牙后裔,本来是姜姓吕氏,后来封在齐国鄣邑,就以鄣为氏。再后来子孙又失去了封邑,就去掉了象征封地的“阝”,就变成了章氏。再后来姓氏不分的时候,就以章为姓了。
姜子牙确实是姜姓,姜姓说明他血缘上是炎帝后裔,姜姓之内是不能婚配的。周朝分封八百诸侯,其中姬姓过半,这些同姓诸侯之间是不能通婚的。姜子牙祖先辅佐大禹治水有功,被封在吕地,所以称吕氏。