在上古的母系社会时代,人们普遍只知其母不知其父,所以一母所生的人,便是拥有了同一个确定的来源,他们的后代也就可以据此追溯,这就是“姓”的来源,即同一女子所生之子女,用以区别于其他女子所生。正因如此,上古时期的姬、姚、妫、姒、姜、嬴、姞、妘等姓,无一例外都有“女”字作为偏旁或组成部分。此后,尽管人类进入父系氏族社会,却依然保留了很多带有“女”字的“姓”,比如周人是黄帝之后,所以以“姬”为姓;齐国始祖太公望,是炎帝之后,所以以“姜”为姓。
同姓之人,也会随着社会分工、阶级分化,或所居地域的不同而逐渐产生差别,由此在“姓”之外,还有不同的“氏”。氏有多种来源,有的以官职为氏,有的以封邑为氏,有的以死后的谥号为氏,有的以先人排行或名字为氏,等等。如太公望的先祖被封在吕地,所以就用“吕”做了氏的名称;又如春秋鲁国的孟孙氏、叔孙氏和季氏,他们同是鲁桓公之后,是依兄弟排行而有了不同的“氏”;孔子以“孔”为氏,是取自其宋国先祖孔父嘉(名为嘉,字孔父)的字;再如南宫、东郭、柳下等,就是以所居之地为氏。拥有“氏”的名称也是一种身份的象征,它向人们说明自己的出身来源。出身低贱的人是不会有“氏”的,充其量有个名字而已;更加低贱的甚至连名字都不会有,直接叫个阿大、阿二这样的排行就行了。
“氏”可以说是为了在同姓族人内部作出区分,因为大家同姓(或者因为一姓的祖先太遥远),称姓就显得没有必要了,所以便用不同的“氏”来区别不同的分支。而“姓”则主要是用于对外的,比如周代便有非常明确的同姓不婚制度,因为同姓代表着出自同一个族源,血缘关系比较近,这样的男女结合以后所育的后代,出现遗传缺陷的几率会比较高;而通过与异姓部族联姻,可以促进部族间结成政治联盟,以增加自身实力。所以同姓之人,虽然不同氏,也不可以通婚;但如果是同氏而不同姓,则可以通婚,因为氏的来源很多,可能偶然相同,但彼此并没有血缘关系。故女子出嫁时才会称姓以进行区分,而男子一般是不用“姓名”连称的。比如太公望,名尚,姓姜,以吕为氏,我们只能叫他吕尚,而绝不能叫他做“姜尚”;称他为“姜太公”已经是秦汉姓氏混同以后的事情了,那时人们已经不太清楚姓和氏的严格区分了。在电视剧《芈月传》中,将楚国(芈姓)的王女叫做“芈月”、“芈姝”是正确的,而王族的男性贵族,则是分属于昭、景、屈三氏的,屈原便是“屈”氏一支。再如秦国的祖先虽然也是黄帝后裔,但后来分化出来一支以“嬴”为姓,号称“秦嬴”,但原则上我们不能把秦始皇叫做“嬴政”,而应叫做秦王政或始皇帝政。
综上,我们需要了解的是,先秦时期,贵族男子的“名”前是一律不能加上姓的,以姬为姓的周人部族就是如此—周武王的父亲只能叫做“西伯昌”或“文王昌”,而不能叫做“姬昌”;周武王也就只能叫做“武王发”,而不能叫做“姬发”;同样的,文王昌之子,武王发的弟弟旦,也就是鲁国先祖周公,也只能叫他做“周公旦”,而不能叫做“姬旦”。中国语言中的同音字很多,不明其故的人听到“姬旦”这个词后,难免会误以为是“鸡蛋”,就令人啼笑皆非了。至于后来一些历史记载也有将周人的姓和名连称的情况,是因为受到秦汉之后姓与氏的概念逐渐相融、混同的影响,则另当别论。