精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我終于搞清楚了和String有關的那點事兒

開發(fā) 開發(fā)工具
String,是Java中除了基本數(shù)據(jù)類型以外,最為重要的一個類型了。很多人會認為他比較簡單。但是和String有關的面試題有很多,下面我隨便找兩道面試題,看看你能不能都答。

String,是Java中除了基本數(shù)據(jù)類型以外,最為重要的一個類型了。很多人會認為他比較簡單。但是和String有關的面試題有很多,下面我隨便找兩道面試題,看看你能不能都答對:

Q1:String s = new String("hollis");定義了幾個對象。

Q2:如何理解String的intern方法?

上面這兩個是面試題和String相關的比較常考的,很多人一般都知道答案。

A1:若常量池中已經(jīng)存在"hollis",則直接引用,也就是此時只會創(chuàng)建一個對象,如果常量池中不存在"hollis",則先創(chuàng)建后引用,也就是有兩個。

A2:當一個String實例調用intern()方法時,JVM會查找常量池中是否有相同Unicode的字符串常量,如果有,則返回其的引用,如果沒有,則在常量池中增加一個Unicode等于str的字符串并返回它的引用;

兩個答案看上去沒有任何問題,但是,仔細想想好像哪里不對呀。

按照上面的兩個面試題的回答,就是說new String會檢查常量池,如果有的話就直接引用,如果不存在就要在常量池創(chuàng)建一個,那么還要intern干啥?難道以下代碼是沒有意義的嗎?

  1. String s = new String("Hollis").intern(); 

如果,每當我們使用new創(chuàng)建字符串的時候,都會到字符串池檢查,然后返回。那么以下代碼也應該輸出結果都是true?

  1. String s1 = "Hollis"
  2.     String s2 = new String("Hollis"); 
  3.     String s3 = new String("Hollis").intern(); 
  4.  
  5.     System.out.println(s1 == s2); 
  6.     System.out.println(s1 == s3); 

但是,以上代碼輸出結果為(base jdk1.8.0_73):

  1. false 
  2. true 

不知道,聰明的讀者看完這段代碼之后,是不是有點被搞蒙了,到底是怎么回事兒?

別急,且聽我慢慢道來。

字面量和運行時常量池

JVM為了提高性能和減少內(nèi)存開銷,在實例化字符串常量的時候進行了一些優(yōu)化。為了減少在JVM中創(chuàng)建的字符串的數(shù)量,字符串類維護了一個字符串常量池。

在JVM運行時區(qū)域的方法區(qū)中,有一塊區(qū)域是運行時常量池,主要用來存儲編譯期生成的各種字面量和符號引用。

了解Class文件結構或者做過Java代碼的反編譯的朋友可能都知道,在java代碼被javac編譯之后,文件結構中是包含一部分Constant pool的。比如以下代碼:

  1. public static void main(String[] args) { 
  2.     String s = "Hollis"

經(jīng)過編譯后,常量池內(nèi)容如下:

  1. Constant pool: 
  2.   #1 = Methodref          #4.#20         // java/lang/Object."<init>":()V 
  3.   #2 = String             #21            // Hollis 
  4.   #3 = Class              #22            // StringDemo 
  5.   #4 = Class              #23            // java/lang/Object 
  6.   ... 
  7.   #16 = Utf8               s 
  8.   .. 
  9.   #21 = Utf8               Hollis 
  10.   #22 = Utf8               StringDemo 
  11.   #23 = Utf8               java/lang/Object 

上面的Class文件中的常量池中,比較重要的幾個內(nèi)容:

  1. #16 = Utf8               s 
  2.   #21 = Utf8               Hollis 
  3.   #22 = Utf8               StringDemo 

上面幾個常量中,s就是前面提到的符號引用,而Hollis就是前面提到的字面量。而Class文件中的常量池部分的內(nèi)容,會在運行期被運行時常量池加載進去。關于字面量,詳情參考Java SE Specifications

new String創(chuàng)建了幾個對象

下面,我們可以來分析下String s = new String("Hollis");創(chuàng)建對象情況了。

這段代碼中,我們可以知道的是,在編譯期,符號引用s和字面量Hollis會被加入到Class文件的常量池中,然后在類加載階段,這兩個常量會進入常量池。

但是,這個“進入”過程,并不會直接把所有類中定義的常量全部都加載進來,而是會做個比較,如果需要加到字符串常量池中的字符串已經(jīng)存在,那么就不需要再把字符串字面量加載進來了。

所以,當我們說<若常量池中已經(jīng)存在"hollis",則直接引用,也就是此時只會創(chuàng)建一個對象>說的就是這個字符串字面量在字符串池中被創(chuàng)建的過程。

說完了編譯期的事兒了,該到運行期了,在運行期,new String("Hollis");執(zhí)行到的時候,是要在Java堆中創(chuàng)建一個字符串對象的,而這個對象所對應的字符串字面量是保存在字符串常量池中的。但是,String s = new String("Hollis");,對象的符號引用s是保存在Java虛擬機棧上的,他保存的是堆中剛剛創(chuàng)建出來的的字符串對象的引用。

所以,你也就知道以下代碼輸出結果為false的原因了。

  1. String s1 = new String("Hollis"); 
  2. String s2 = new String("Hollis"); 
  3. System.out.println(s1 == s2); 

因為,==比較的是s1和s2在堆中創(chuàng)建的對象的地址,當然不同了。但是如果使用equals,那么比較的就是字面量的內(nèi)容了,那就會得到true。

在不同版本的JDK中,Java堆和字符串常量池之間的關系也是不同的,這里為了方便表述,就畫成兩個獨立的物理區(qū)域了。具體情況請參考Java虛擬機規(guī)范。

上圖中s1和s2是兩個完全不同的對象,在堆中有自己的內(nèi)存空間,當然不相等了。

所以,String s = new String("Hollis");創(chuàng)建幾個對象的答案你也就清楚了。

常量池中的“對象”是在編譯期就確定好了的,在類被加載的時候創(chuàng)建的,如果類加載時,該字符串常量在常量池中已經(jīng)有了,那這一步就省略了。堆中的對象是在運行期才確定的,在代碼執(zhí)行到new的時候創(chuàng)建的。

運行時常量池的動態(tài)擴展

編譯期生成的各種字面量和符號引用是運行時常量池中比較重要的一部分來源,但是并不是全部。那么還有一種情況,可以在運行期像運行時常量池中增加常量。那就是String的intern方法。

當一個String實例調用intern()方法時,JVM會查找常量池中是否有相同Unicode的字符串常量,如果有,則返回其的引用,如果沒有,則在常量池中增加一個Unicode等于str的字符串并返回它的引用;

intern()有兩個作用,***個是將字符串字面量放入常量池(如果池沒有的話),第二個是返回這個常量的引用。

我們再來看下開頭的那個讓人產(chǎn)生疑惑的例子:

  1. String s1 = "Hollis"
  2.     String s2 = new String("Hollis"); 
  3.     String s3 = new String("Hollis").intern(); 
  4.  
  5.     System.out.println(s1 == s2); 
  6.     System.out.println(s1 == s3); 

你可以簡單的理解為String s1 = "Hollis";和String s3 = new String("Hollis").intern();做的事情是一樣的(但實際有些區(qū)別,這里暫不展開)。都是定義一個字符串對象,然后將其字符串字面量保存在常量池中,并把這個字面量的引用返回給定義好的對象引用。如下圖:

對于String s3 = new String("Hollis").intern();,在不調intern情況,s3指向的是JVM在堆中創(chuàng)建的那個對象的引用的(如圖中的s2)。但是當執(zhí)行了intern方法時,s3將指向字符串常量池中的那個字符串常量。

由于s1和s3都是字符串常量池中的字面量的引用,所以s1==s3。但是,s2的引用是堆中的對象,所以s2!=s1。

intern的正確用法

不知道,你有沒有發(fā)現(xiàn),在String s3 = new String("Hollis").intern();中,其實intern是多余的?

因為就算不用intern,Hollis作為一個字面量也會被加載到Class文件的常量池,進而加入到運行時常量池中,為啥還要多此一舉呢?到底什么場景下才會用到intern呢?

在解釋這個之前,我們先來看下以下代碼:

  1. String s1 = "Hollis"
  2.     String s2 = "Chuang"
  3.     String s3 = s1 + s2; 
  4.     String s4 = "Hollis" + "Chuang"

在經(jīng)過反編譯后,得到代碼如下:

  1. String s1 = "Hollis"
  2.    String s2 = "Chuang"
  3.    String s3 = (new StringBuilder()).append(s1).append(s2).toString(); 
  4.    String s4 = "HollisChuang"

可以發(fā)現(xiàn),同樣是字符串拼接,s3和s4在經(jīng)過編譯器編譯后的實現(xiàn)方式并不一樣。s3被轉化成StringBuilder及append,而s4被直接拼接成新的字符串。

如果你感興趣,你還能發(fā)現(xiàn),String s4 = s1 + s2; 經(jīng)過編譯之后,常量池中是有兩個字符串常量的分別是 Hollis、Chuang(其實Hollis和Chuang是String s1 = "Hollis";和String s2 = "Chuang";定義出來的),拼接結果HollisChuang并不在常量池中。

如果代碼只有String s4 = "Hollis" + "Chuang";,那么常量池中將只有HollisChuang而沒有Hollis和 Chuang。

究其原因,是因為常量池要保存的是已確定的字面量值。也就是說,對于字符串的拼接,純字面量和字面量的拼接,會把拼接結果作為常量保存到字符串。

如果在字符串拼接中,有一個參數(shù)是非字面量,而是一個變量的話,整個拼接操作會被編譯成StringBuilder.append,這種情況編譯器是無法知道其確定值的。只有在運行期才能確定。

那么,有了這個特性了,intern就有用武之地了。那就是很多時候,我們在程序中用到的字符串是只有在運行期才能確定的,在編譯期是無法確定的,那么也就沒辦法在編譯期被加入到常量池中。

這時候,對于那種可能經(jīng)常使用的字符串,使用intern進行定義,每次JVM運行到這段代碼的時候,就會直接把常量池中該字面值的引用返回,這樣就可以減少大量字符串對象的創(chuàng)建了。

如一美團點評團隊的《深入解析String#intern》文中舉的一個例子:

  1. static final int MAX = 1000 * 10000; 
  2. static final String[] arr = new String[MAX]; 
  3.  
  4. public static void main(String[] args) throws Exception { 
  5.     Integer[] DB_DATA = new Integer[10]; 
  6.     Random random = new Random(10 * 10000); 
  7.     for (int i = 0; i < DB_DATA.length; i++) { 
  8.         DB_DATA[i] = random.nextInt(); 
  9.     } 
  10.     for (int i = 0; i < MAX; i++) { 
  11.          arr[i] = new String(String.valueOf(DB_DATA[i % DB_DATA.length])).intern(); 
  12.     } 

在以上代碼中,我們明確的知道,會有很多重復的相同的字符串產(chǎn)生,但是這些字符串的值都是只有在運行期才能確定的。所以,只能我們通過intern顯示的將其加入常量池,這樣可以減少很多字符串的重復創(chuàng)建。

總結

我們再回到文章開頭那個疑惑:按照上面的兩個面試題的回答,就是說new String也會檢查常量池,如果有的話就直接引用,如果不存在就要在常量池創(chuàng)建一個,那么還要intern干啥?難道以下代碼是沒有意義的嗎?

  1. String s = new String("Hollis").intern(); 

new String 所謂的“如果有的話就直接引用”,指的是Java堆中創(chuàng)建的String對象中包含的字符串字面量直接引用字符串池中的字面量對象。也就是說,還是要在堆里面創(chuàng)建對象的。

而intern中說的“如果有的話就直接返回其引用”,指的是會把字面量對象的引用直接返回給定義的對象。這個過程是不會在Java堆中再創(chuàng)建一個String對象的。

的確,以上代碼的寫法其實是使用intern是沒什么意義的。因為字面量Hollis會作為編譯期常量被加載到運行時常量池。

之所以能有以上的疑惑,其實是對字符串常量池、字面量等概念沒有真正理解導致的。有些問題其實就是這樣,單個問題,自己都知道答案,但是多個問題綜合到一起就蒙了。歸根結底是知識的理解還停留在點上,沒有串成面。

本文中的內(nèi)容歡迎大家討論,因為筆者只是翻閱了部分JVM規(guī)范及Java語言規(guī)范,并未完全深入到虛擬機源碼級別。如有偏頗請不吝賜教。文中例子是為了方面講解特意舉的,如有不當之處望諒解。

【本文是51CTO專欄作者Hollis的原創(chuàng)文章,作者微信公眾號Hollis(ID:hollischuang)】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2020-11-16 08:37:16

MariaDB性能優(yōu)化

2021-09-01 09:32:40

工具

2022-11-16 14:02:44

2020-12-02 09:36:09

處理器手機卡頓

2020-05-16 13:25:03

分析網(wǎng)購數(shù)據(jù)

2023-06-26 11:59:52

標簽質量梳理

2011-06-22 09:37:03

桌面虛擬化存儲

2025-06-24 09:16:48

2020-12-16 11:09:27

JavaScript語言開發(fā)

2020-12-31 07:57:25

JVM操作代碼

2022-08-08 08:48:15

Go版本偽版本

2021-09-21 16:18:07

手機電池快充

2020-10-27 08:24:45

阿里巴巴SLF4J

2017-08-15 08:27:48

云備份問題恢復

2015-10-12 10:01:26

AndroidWindows應用Windows 10

2025-08-25 09:42:45

2018-06-20 10:43:58

云端霧端霧計算

2021-01-19 06:43:10

Netty框架網(wǎng)絡技術

2023-01-26 00:01:00

機器學習大腦活動

2011-03-07 17:44:59

中小企業(yè)實施虛擬化
點贊
收藏

51CTO技術棧公眾號

www.xxx国产| 折磨小男生性器羞耻的故事| 日本国产在线| 久久中文精品| xxxxx成人.com| 久久久久无码精品| 伊人久久综合一区二区| 中文字幕免费一区| 亚洲自拍偷拍福利| 五月天激情国产综合婷婷婷| 日韩理论电影院| 日韩视频在线一区二区| 免费黄色日本网站| 黄色片网站在线观看| 国产成人免费网站| 国产va免费精品高清在线观看| 黄色一级片一级片| 91麻豆精品激情在线观看最新| 欧美午夜美女看片| 午夜视频久久久| av片免费播放| 久久亚洲风情| 欧美乱大交xxxxx| 国产精品无码一区二区三区免费 | 69精品丰满人妻无码视频a片| 日本精品久久久久久| 夜夜精品视频| 久久精品国产一区二区电影| 四虎成人免费视频| 日本a人精品| 亚洲成人av一区二区三区| 日韩三级电影| 网站黄在线观看| 青青国产91久久久久久| 欧美极品欧美精品欧美视频| 真人bbbbbbbbb毛片| 成人污版视频| 欧美三级视频在线| 国产精品视频一区二区三区四区五区| 麻豆tv免费在线观看| 91视频www| 国产精品一区二区三区免费观看| 91av久久久| 老牛影视一区二区三区| 久久久午夜视频| 国产精品视频一区二区三| 午夜精品福利影院| 日韩欧美精品在线视频| 久久久久国产一区| 欧美一级大黄| 日韩欧美精品在线观看| 精品久久久久久久久久中文字幕| 五月香视频在线观看| 久久精品人人做人人爽97| 国产午夜精品一区| 亚洲xxx在线| 国产精品一品视频| 91久久精品国产91性色| 亚洲专区第一页| 日韩二区在线观看| 国产成人在线一区| 中文字幕黄色片| 亚洲欧美清纯在线制服| 97碰在线观看| 2021亚洲天堂| 欧美日韩第一区| 欧美另类99xxxxx| 少妇高潮惨叫久久久久| 色综合天天综合网中文字幕| 中文字幕九色91在线| 草草影院第一页| 激情综合网五月| 中文字幕日韩视频| 精品国产成人亚洲午夜福利| 少妇精品久久久一区二区三区| 精品久久五月天| 一级网站在线观看| 亚洲一区二区三区免费| 欧美videos中文字幕| 无码国产精品久久一区免费| 欧美综合影院| 91精品国产综合久久精品麻豆| 免费精品99久久国产综合精品应用| 日韩一区二区三区免费视频| 一本色道久久综合精品竹菊| 国内精品在线观看视频| 7777kkk亚洲综合欧美网站| 精品动漫一区二区三区| 丝袜老师办公室里做好紧好爽 | 国产小视频一区| caoporm超碰国产精品| 久久亚洲免费| 男人久久精品| 中文字幕一区二区三区乱码在线 | 亚洲欧美色图| 久久久久久久久国产精品| 国产精品500部| 久久久777| 国产精品精品久久久久久| 91午夜交换视频| 国产不卡视频在线观看| 好看的日韩精品| 大胆av不用播放器在线播放| 国产精品灌醉下药二区| 精品免费久久久久久久| videos性欧美另类高清| 午夜久久久久久电影| 激情 小说 亚洲 图片: 伦| 欧美视频精品全部免费观看| 日韩经典中文字幕| 四虎永久免费地址| 国产精品毛片| 亚洲影院高清在线| 蜜桃视频在线播放| 亚洲日本va在线观看| 久久综合九色综合88i| jizz久久久久久| 亚洲福利视频网| 成年人在线免费看片| 激情欧美日韩| 国产在线精品播放| 韩日视频在线| 亚洲国产精品嫩草影院| 亚洲一区二区三区观看| 欧美调教视频| 欧美夫妻性生活xx| 国产污视频网站| av爱爱亚洲一区| 久久久天堂国产精品| 欧美日韩尤物久久| 日韩精品视频观看| 国产一级生活片| 精品一区二区免费视频| 欧美日韩精品免费在线观看视频| 少女频道在线观看高清 | 亚洲国产精品电影| 免费成人深夜夜行网站| 日韩精品色哟哟| 精品久久久久久亚洲| 超鹏97在线| 欧美日本韩国一区二区三区视频| 在线 丝袜 欧美 日韩 制服| 一区在线观看| 91视频在线免费观看| 色老头视频在线观看| 在线欧美一区二区| 泷泽萝拉在线播放| 国产精品亚洲产品| 国产欧美日韩在线播放| 手机av免费在线| 欧美一级淫片007| 中文字幕美女视频| 久久se精品一区精品二区| 日韩电影大全在线观看| 日韩精品卡一| 亚洲成人精品久久| 久久综合加勒比| 成人免费黄色大片| 久久99久久久久久| 在线精品自拍| 久久久久久九九九| 天天操天天干天天爱| 亚洲国产成人va在线观看天堂| 97免费公开视频| 综合久久十次| 92看片淫黄大片看国产片| 麻豆影院在线| 欧美一级精品在线| 国产午夜手机精彩视频| 巨乳诱惑日韩免费av| 秋霞在线观看一区二区三区| 美女福利一区二区三区| 亚洲深夜福利在线| 中文 欧美 日韩| 亚洲欧洲国产日韩| 久久99999| 国产精品久久久久久久久久10秀| 92国产精品久久久久首页| 色呦呦视频在线观看| 精品国产麻豆免费人成网站| 亚洲熟女www一区二区三区| 另类小说视频一区二区| 大桥未久一区二区三区| 91在线一区| 日本精品视频在线| 在线中文资源天堂| 欧美一级久久久| 中文字幕在线字幕中文| www激情久久| 超碰在线公开97| 欧美 日韩 国产精品免费观看| 成人自拍网站| 校园春色亚洲色图| 久久影院模特热| 午夜影院免费视频| 欧美性大战久久久久久久蜜臀 | 亚洲视频三区| 4438全国亚洲精品在线观看视频| 毛片免费在线播放| 欧美一区二区三区在| 免费中文字幕视频| 久久精品人人做人人综合 | 国产91精品一区二区麻豆网站| 国产一区二区三区小说| 欧美日韩在线二区| 97se亚洲综合在线| 日本精品不卡| 欧美另类交人妖| 第九色区av在线| 日韩三级在线观看| 波多野结衣视频在线观看| 亚洲久本草在线中文字幕| 野花社区视频在线观看| 激情六月婷婷久久| 欧美 丝袜 自拍 制服 另类| 欧美激情欧美| 久久精品国产精品国产精品污| 国产精品久久乐| 韩国一区二区电影| 性欧美videoshd高清| 亚洲人成网在线播放| 亚洲成人久久精品| 欧美日韩另类一区| 草莓视频18免费观看| 亚洲乱码日产精品bd| 青青青视频在线播放| 久久嫩草精品久久久精品| 伊人影院在线观看视频| 免费观看在线综合色| 天天夜碰日日摸日日澡性色av| 精品国产91久久久久久浪潮蜜月| 精品欧美国产| 6080成人| 91精品视频在线看| 福利精品在线| 国产精品18久久久久久麻辣| av片在线观看网站| www国产91| 91av资源在线| 亚洲色图综合网| 久久电影中文字幕| 日韩成人在线电影网| 精品人妻一区二区三区含羞草| 5566中文字幕一区二区电影| 免费黄色小视频在线观看| 午夜久久久久久久久久一区二区| 日韩视频中文字幕在线观看| 91蝌蚪porny| 天堂av在线8| 日韩高清一区二区| 国产白丝袜美女久久久久| 最新日韩av| 国产精品专区在线| 亚洲激情国产| 欧美 日韩 国产 高清| 亚洲麻豆一区| 女人天堂av手机在线| 91综合在线| 一区二区三区四区国产| 色777狠狠狠综合伊人| 亚洲精品一区二区三区樱花 | 中文字幕亚洲不卡| 午夜剧场免费在线观看| 亚洲视频一区二区在线| 午夜69成人做爰视频| 亚洲精品写真福利| 久久高清无码视频| 亚洲第一av色| 精品无码m3u8在线观看| 亚洲国产精品欧美一二99| 日本五十熟hd丰满| 欧美视频在线观看免费| 亚洲图片在线视频| 在线视频中文字幕一区二区| 国产精品传媒在线观看| 欧美日韩国产影片| 国产三级午夜理伦三级| 欧美成人三级在线| 亚洲欧美日韩免费| 精品盗摄一区二区三区| 视频福利在线| 在线看日韩欧美| 大片免费在线看视频| 久久久久一本一区二区青青蜜月 | 国产精品国产三级在线观看| www亚洲欧美| 第一av在线| 国产成人精品久久二区二区| 欧美videos粗暴| 国产成人精品一区二区三区福利 | 欧美肉大捧一进一出免费视频| 26uuu国产在线精品一区二区| 五月婷六月丁香| 一区二区三区中文在线| 毛片基地在线观看| 欧美日韩国产三级| 国产男男gay体育生网站| 精品99一区二区| 都市激情一区| 欧美贵妇videos办公室| 在线国产成人影院| 91亚洲精品在线观看| 欧美1区2区3| 乱一区二区三区在线播放| 成人在线免费视频观看| 国产乱人伦精品一区二区三区| 久久精品人人做人人爽电影蜜月| 中文字幕成人免费视频| 91麻豆精品在线观看| 永久免费未视频| 欧美日韩亚洲系列| 91尤物国产福利在线观看| 精品丝袜一区二区三区| 成年人在线观看| 国内外成人免费激情在线视频| 四虎精品一区二区免费| 蜜桃麻豆www久久国产精品| 午夜日韩激情| 免费成人黄色大片| 久久久九九九九| 国产精品第二十页| 欧美一区二区网站| 成av人电影在线观看| 欧美亚洲国产日本| 91九色鹿精品国产综合久久香蕉| 少妇精品久久久久久久久久| 尹人成人综合网| 亚洲国产综合av| 中文字幕一区二区5566日韩| 麻豆精品久久久久久久99蜜桃| 欧美一级片免费看| 午夜小视频在线| 日本久久中文字幕| 亲子伦视频一区二区三区| 日韩一级免费看| 狠狠色狠狠色综合| 日本高清黄色片| 色婷婷精品大在线视频| 国产理论视频在线观看| 中文字幕欧美日韩精品| 快播电影网址老女人久久| 91精品黄色| 伊人情人综合网| 日本新janpanese乱熟| 91视频在线看| 欧美日韩乱国产| 精品无码久久久久久国产| 国内精品久久久久国产| 国产美女精彩久久| 一区二区三区韩国免费中文网站| 国产精品久久久久7777| 国产不卡一区视频| 国产小视频在线观看免费| 日韩欧美电影在线| av观看在线| 99re国产在线播放| 欧美理论在线| 黄色国产精品视频| 久久久久久免费毛片精品| 波多野结衣一区二区三区四区| 亚洲精品视频在线观看视频| 亚洲欧洲美洲av| 欧美一区二区三区四区五区六区| 久久综合导航| 天堂网av2018| 制服丝袜亚洲色图| 成人性爱视频在线观看| 国产精品福利在线| 91欧美大片| 在线看免费毛片| 中文字幕亚洲不卡| 精品国产18久久久久久| 久久久久亚洲精品成人网小说| 亚洲都市激情| 手机在线看福利| 国产精品水嫩水嫩| 国产剧情精品在线| 国内精品久久久久| 一区三区在线欧| 久久久久久蜜桃一区二区| 亚洲人成7777| 天堂网www中文在线| 国产精品成人播放| 婷婷色综合网| 男女一区二区三区| 亚洲一区二区三区在线| 黄色av免费在线观看| 91免费精品国偷自产在线| 久久精品国内一区二区三区水蜜桃| 青青草原播放器| 精品人伦一区二区三区蜜桃免费| 久久99久久| 91丨九色丨国产| 国产日韩1区| 美女福利视频网| 亚洲成人国产精品| 日韩精品第一| 免费极品av一视觉盛宴| 中文字幕精品一区二区三区精品| www.看毛片|