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

Java中的String,這一篇就夠了

開發 前端
當字符串是不可變時,字符串常量池才有意義。字符串常量池的出現,可以減少創建相同字面量的字符串,讓不同的引用指向池中同一個字符串,為運行時節約很多的堆內存。若字符串可變,字符串常量池失去意義,基于常量池的String.intern()方法也失效,每次創建新的 String 將在堆內開辟出新的空間,占據更多的內存。

今天我們一起看一下Java基礎類:String

定義

  1. String表示字符串類型,屬于引用數據類型,不屬于基本數據類型。
  2. 在java中隨便使用 雙引號括起來 的都是String對象。例如:"abc","def","hello world!",這是3個String對象。
  3. java中規定,雙引號括起來的字符串,是 不可變 的,也就是說"abc"自出生到最終死亡,不可變,不能變成"abcd",也不能變成"ab"

源碼解讀

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
   /**用來存儲字符串  */
   private final char value[];
 
   /** 緩存字符串的哈希碼 */
   private int hash; // Default to 0
 
   /** 實現序列化的標識 */
   private static final long serialVersionUID = -6849794470754667710L;
}

這是一個用 final 聲明的常量類,不能被任何類所繼承,而且一旦一個String對象被創建, 包含在這個對象中的字符序列是不可改變的, 包括該類后續的所有方法都是不能修改該對象的,直至該對象被銷毀,這是我們需要特別注意的(該類的一些方法看似改變了字符串,其實內部都是創建一個新的字符串,下面講解方法時會介紹)。

通過上述代碼可以發現,一個 String 字符串實際上是一個 char 數組。

聲明方式

//注意這種字面量聲明的區別
String str1 = "abc";
String str2 = new String("abc");

JDK1.6

那么這兩種聲明方式有什么區別呢?在講解之前,我們先介紹 JDK1.7(不包括1.7)以前的 JVM 的內存分布:

圖片圖片

  1. 程序計數器:也稱為 PC 寄存器,保存的是程序當前執行的指令的地址(也可以說保存下一條指令的所在存儲單元的地址),當CPU需要執行指令時,需要從程序計數器中得到當前需要執行的指令所在存儲單元的地址,然后根據得到的地址獲取到指令,在得到指令之后,程序計數器便自動加1或者根據轉移指針得到下一條指令的地址,如此循環,直至執行完所有的指令。線程私有。
  2. 虛擬機棧:基本數據類型、對象的引用都存放在這。線程私有。
  3. 本地方法棧:虛擬機棧是為執行Java方法服務的,而本地方法棧則是為執行本地方法(Native Method)服務的。在JVM規范中,并沒有對本地方法棧的具體實現方法以及數據結構作強制規定,虛擬機可以自由實現它。在HotSopt虛擬機中直接就把本地方法棧和虛擬機棧合二為一。
  4. 方法區:存儲了每個類的信息(包括類的名稱、方法信息、字段信息)、靜態變量、常量以及編譯器編譯后的代碼等。注意:在Class文件中除了類的字段、方法、接口等描述信息外,還有一項信息是常量池,用來存儲編譯期間生成的字面量和符號引用。
  5. 堆:用來存儲對象本身的以及數組(當然,數組引用是存放在Java棧中的)。

JDK1.7及以后

在 JDK1.7 以后,方法區的常量池被移除放到堆中了,如下:

圖片圖片

常量池:Java運行時會維護一個String Pool(String池), 也叫“字符串緩沖區”。String池用來存放運行時中產生的各種字符串,并且池中的字符串的內容不重復。

  1. 字面量創建字符串或者純字符串(常量)拼接字符串會先在字符串池中找,看是否有相等的對象,沒有的話就在字符串池創建該對象;有的話則直接用池中的引用,避免重復創建對象。
  2. new關鍵字創建時,直接在堆中創建一個新對象,變量所引用的都是這個新對象的地址,但是如果通過new關鍵字創建的字符串內容在常量池中存在了,那么會由堆在指向常量池的對應字符;但是反過來,如果通過new關鍵字創建的字符串對象在常量池中沒有,那么通過new關鍵詞創建的字符串對象是不會額外在常量池中維護的。
  3. 使用包含變量表達式來創建String對象,則不僅會檢查維護字符串池,還會在堆區創建這個對象,最后是指向堆內存的對象。

內存分析

1. String str = "Hello";
public class stringclass {
    public static void main(String[] args) {
        String str="Hello";
        String str2="Hello";
        System.out.println(str==str2);
        str="World";
    }
}
//輸出結果:true

圖片圖片

2. String str = new String ("Hello");
public class stringclass {
    public static void main(String[] args) {
        String str= new String("Hello");
        String str2= new String("Hello");
        String str3 = "Hello";
        System.out.println(str==str2);
        System.out.println(str==str3);
    }
}  
//輸出結果:false  false
3. String str = "Hello" + "World";
public class stringclass {
    public static void main(String[] args) {
        //當一個字符串由多個字符串常量連接而成時,它自己肯定也是字符串常量。
        //該字符串是在編譯期就能確定。先是在池里生成“a”和“b”,再通過拼接的方式在池里生成"ab"。
        String str="Hello" + "World";
    }
}

圖片圖片

4. String str = new String ("Hello") + new String("World");

當使用了變量字符串的拼接(+, sb.append)都只會在堆區創建該字符串對象, 并不會在常量池創建新生成的字符串

public class stringclass {
    public static void main(String[] args) {
        String str=new String("Hello") + new String("World");
    }
}

圖片圖片

常見操作

1. equals(Object anObject)

public boolean equals(Object anObject) {
   if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
           char v2[] = anotherString.value;
           int i = 0;
           while (n-- != 0) {
               if (v1[i] != v2[i])
                  return false;
               i++;
           }
           return true;
       }
   }
   return false;
}

String 類重寫了 equals 方法,比較的是組成字符串的每一個字符是否相同,如果都相同則返回true,否則返回false。

2. hashCode()

public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
   }
   return h;
}

String 類的 hashCode 算法很簡單,主要就是中間的 for 循環,計算公式如下:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

s 數組即源碼中的 val 數組,也就是構成字符串的字符數組。這里有個數字 31 ,為什么選擇31作為乘積因子,而且沒有用一個常量來聲明?主要原因有兩個:

  • 31是一個不大不小的質數,是作為 hashCode 乘子的優選質數之一。
  • 31可以被 JVM 優化,31 * i = (i << 5) - i。因為移位運算比乘法運行更快更省性能。

3. charAt(int index)

public char charAt(int index) {
   //如果傳入的索引大于字符串的長度或者小于0,直接拋出索引越界異常
   if ((index < 0) || (index >= value.length)) {
       throw new StringIndexOutOfBoundsException(index);
   }
   return value[index];//返回指定索引的單個字符
}

我們知道一個字符串是由一個字符數組組成,這個方法是通過傳入的索引(數組下標),返回指定索引的單個字符。

4. compareTo(String anotherString)

public int compareTo(String anotherString) {
    int len1 = value.length;
    int len2 = anotherString.value.length;
    int lim = Math.min(len1, len2);
    char v1[] = value;
    char v2[] = anotherString.value;

    int k = 0;
    while (k < lim) {
       char c1 = v1[k];
       char c2 = v2[k];
       if (c1 != c2) {
           return c1 - c2;
       }
       k++;
   }
   return len1 - len2;
}

源碼也很好理解,該方法是按字母順序比較兩個字符串,是基于字符串中每個字符的 Unicode 值。當兩個字符串某個位置的字符不同時,返回的是這一位置的字符 Unicode 值之差,當兩個字符串都相同時,返回兩個字符串長度之差。

compareToIgnoreCase() 方法在 compareTo 方法的基礎上忽略大小寫,我們知道大寫字母是比小寫字母的Unicode值小32的,底層實現是先都轉換成大寫比較,然后都轉換成小寫進行比較。

5. concat(String str)

public String concat(String str) {
    int otherLen = str.length();
    if (otherLen == 0) {
        return this;
    }
    int len = value.length;
    char buf[] = Arrays.copyOf(value, len + otherLen);
    str.getChars(buf, len);
    return new String(buf, true);
}

該方法是將指定的字符串連接到此字符串的末尾。

首先判斷要拼接的字符串長度是否為0,如果為0,則直接返回原字符串。如果不為0,則通過 Arrays 工具類的copyOf方法創建一個新的字符數組,長度為原字符串和要拼接的字符串之和,前面填充原字符串,后面為空。接著在通過 getChars 方法將要拼接的字符串放入新字符串后面為空的位置。

注意:返回值是 new String(buf, true),也就是重新通過 new 關鍵字創建了一個新的字符串,原字符串是不變的。這也是前面我們說的一旦一個String對象被創建, 包含在這個對象中的字符序列是不可改變的。

6. indexOf(int ch)

public int indexOf(int ch) {
        return indexOf(ch, 0);//從第一個字符開始搜索
    }
  public int indexOf(int ch, int fromIndex) {
      final int max = value.length;//max等于字符的長度
      if (fromIndex < 0) {//指定索引的位置如果小于0,默認從 0 開始搜索
          fromIndex = 0;
      } else if (fromIndex >= max) {
          //如果指定索引值大于等于字符的長度(因為是數組,下標最多只能是max-1),直接返回-1
          return -1;
      }
  
     if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {//一個char占用兩個字節,如果ch小于2的16次方(65536),絕大多數字符都在此范圍內
         final char[] value = this.value;
         for (int i = fromIndex; i < max; i++) {//for循環依次判斷字符串每個字符是否和指定字符相等
             if (value[i] == ch) {
                 return i;//存在相等的字符,返回第一次出現該字符的索引位置,并終止循環
             }
         }
         return -1;//不存在相等的字符,則返回 -1
      }else {//當字符大于 65536時,處理的少數情況,該方法會首先判斷是否是有效字符,然后依次進行比較
         return indexOfSupplementary(ch, fromIndex);
    }
}

indexOf(int ch),參數 ch 其實是字符的 Unicode 值,這里也可以放單個字符(默認轉成int),作用是返回指定字符第一次出現的此字符串中的索引。其內部是調用 indexOf(int ch, int fromIndex),只不過這里的 fromIndex =0 ,因為是從 0 開始搜索;而 indexOf(int ch, int fromIndex) 作用也是返回首次出現的此字符串內的索引,但是從指定索引處開始搜索。

7. substring(int beginIndex)

public String substring(int beginIndex) {
    if (beginIndex < 0) {//如果索引小于0,直接拋出異常
        throw new StringIndexOutOfBoundsException(beginIndex);
    }
    int subLen = value.length - beginIndex;//subLen等于字符串長度減去索引
    if (subLen < 0) {//如果subLen小于0,也是直接拋出異常
        throw new StringIndexOutOfBoundsException(subLen);
    }
    //1、如果索引值beginIdex == 0,直接返回原字符串
    //2、如果不等于0,則返回從beginIndex開始,一直到結尾
    return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}

返回一個從索引 beginIndex 開始一直到結尾的子字符串。

String不可變性

String 類為什么要這樣設計成不可變呢?我們可以從性能以及安全方面來考慮:

  • 安全

引發安全問題,譬如,數據庫的用戶名、密碼都是以字符串的形式傳入來獲得數據庫的連接,或者在socket編程中,主機名和端口都是以字符串的形式傳入。因為字符串是不可變的,所以它的值是不可改變的,否則黑客們可以鉆到空子,改變字符串指向的對象的值,造成安全漏洞。

保證線程安全,在并發場景下,多個線程同時讀寫資源時,會引競態條件,由于 String 是不可變的,不會引發線程的問題而保證了線程。

HashCode,當 String 被創建出來的時候,hashcode也會隨之被緩存,hashcode的計算與value有關,若 String 可變,那么 hashcode 也會隨之變化,針對于 Map、Set 等容器,他們的鍵值需要保證唯一性和一致性,因此,String 的不可變性使其比其他對象更適合當容器的鍵值。

  • 性能
  • 當字符串是不可變時,字符串常量池才有意義。字符串常量池的出現,可以減少創建相同字面量的字符串,讓不同的引用指向池中同一個字符串,為運行時節約很多的堆內存。若字符串可變,字符串常量池失去意義,基于常量池的String.intern()方法也失效,每次創建新的 String 將在堆內開辟出新的空間,占據更多的內存。
責任編輯:武曉燕 來源: Java技術指北
相關推薦

2024-04-10 08:22:44

2020-08-03 10:00:11

前端登錄服務器

2023-04-24 08:00:00

ES集群容器

2020-07-03 08:21:57

Java集合框架

2022-04-07 10:39:21

反射Java安全

2023-02-10 09:04:27

2020-02-18 16:20:03

Redis ANSI C語言日志型

2022-06-20 09:01:23

Git插件項目

2020-05-14 16:35:21

Kubernetes網絡策略DNS

2019-08-13 15:36:57

限流算法令牌桶

2023-09-11 08:13:03

分布式跟蹤工具

2021-04-08 07:37:39

隊列數據結構算法

2022-08-01 11:33:09

用戶分析標簽策略

2023-09-28 08:59:38

2020-07-06 08:06:00

Java模塊系統

2019-05-14 09:31:16

架構整潔軟件編程范式

2023-10-17 08:15:28

API前后端分離

2021-05-14 23:31:50

大數據計算機開發

2020-11-06 10:01:06

Nginx

2024-09-23 08:00:00

消息隊列MQ分布式系統
點贊
收藏

51CTO技術棧公眾號

国产高清第一页| 欧美一级在线亚洲天堂| www.国产一区| 视频免费1区二区三区| 日本在线视频中文有码| 久久综合久久久久88| 国产精品成人在线| 精品无码人妻一区二区三区品| 日韩有码一区| 欧美一二三区精品| 欧美激情成人网| 性欧美1819sex性高清大胸| 91视频xxxx| 91在线免费视频| 少妇高潮av久久久久久| 欧美xxx在线观看| 国产午夜精品全部视频播放| 手机看片国产精品| 草莓视频成人appios| 亚洲国产精品一区二区尤物区| 日韩久久不卡| 天堂在线资源网| 国产一区二区按摩在线观看| 日韩女优在线播放| 日韩成人免费在线视频| 国产电影一区二区在线观看| 日韩久久精品成人| 被黑人猛躁10次高潮视频| av成人在线播放| 精品久久久在线观看| 超级碰在线观看| 国产资源在线看| 99热国产精品| 国产精品乱码一区二区三区| 91国内精品久久久| 国产又色又爽又高潮免费| 日韩欧美一区二区三区免费观看| 亚洲电影中文字幕在线观看| 中文字幕精品一区日韩| 黄色av免费在线观看| av亚洲精华国产精华精华| 91系列在线观看| 在线播放一级片| 日本午夜一本久久久综合| 欧美专区在线观看| 黄色片视频网站| 伊人成年综合电影网| 精品视频9999| 污软件在线观看| 国产大片一区| 久久精品中文字幕一区| 日韩一卡二卡在线观看| 欧美先锋资源| 日韩中文在线观看| 国产精品suv一区二区88| 国产精品亚洲片在线播放| 精品亚洲永久免费精品| 亚洲一区二区三区四区五区六区| 牛牛影视一区二区三区免费看| 日韩欧美电影一二三| 伊人影院在线观看视频| 日本精品一区二区三区在线观看视频| 欧美一区二区三区思思人 | 国产免费成人| 2019亚洲男人天堂| 一级片视频在线观看| 久久精品日产第一区二区| 全球成人中文在线| 尤物视频免费观看| 麻豆久久久久久久| 亚洲aaa激情| 少妇高潮一区二区三区99小说| 波多野结衣中文一区| 久久久久综合一区二区三区| 久久久福利视频| 久青草免费视频| 亚洲人成久久| 日韩av快播网址| 亚洲系列在线观看| 国产剧情av麻豆香蕉精品| 成人午夜影院在线观看| 视频一区二区三区国产| 国产日韩在线不卡| 尤物一区二区三区| 美女网站视频在线| 日韩欧美在线免费| 手机免费av片| 女同久久另类99精品国产| 亚洲男人的天堂在线播放| 中文字幕第二区| 国产精品红桃| 日本道色综合久久影院| 国产精品久久久久精| av电影一区二区| 亚洲一区二区在线观| 毛片网站在线看| 欧美日韩在线一区| 香蕉视频xxxx| 九九热爱视频精品视频| 欧美成人h版在线观看| av大全在线观看| 国产乱码精品一区二区三区av | 亚洲区小说区图片区qvod按摩| 一本色道久久88综合亚洲精品ⅰ| 老妇女50岁三级| 日韩不卡一二三区| 国产99视频精品免费视频36| 国产女主播在线直播| 一区二区三区加勒比av| 91热这里只有精品| 青青操综合网| 欧美巨大黑人极品精男| 无码人妻丰满熟妇区bbbbxxxx| 国产激情视频一区二区三区欧美| 久久综合毛片| 在线免费观看的av| 欧美日韩你懂得| 黄瓜视频污在线观看| 好看的日韩av电影| 国产一区二区丝袜| 巨骚激情综合| 欧美日韩国产黄| gogo亚洲国模私拍人体| 菠萝蜜一区二区| 日产精品久久久一区二区福利| 男人天堂av网| 一区二区三区在线观看视频| av在线网址导航| 日韩毛片视频| 国产精品男人的天堂| 桃花色综合影院| 亚洲电影第三页| 麻豆短视频在线观看| 香蕉视频国产精品| 国产一区香蕉久久| 午夜国产福利在线| 欧美无人高清视频在线观看| 国产福利短视频| 国产婷婷精品| 久久精品二区| 欧美亚洲日本精品| 精品伊人久久97| 青青草成人av| 久久久欧美精品sm网站| 亚洲欧洲日产国码无码久久99| av日韩精品| 高清亚洲成在人网站天堂| www日本在线| 一区二区久久久| 亚洲少妇一区二区三区| 欧美三级视频| 国产欧美欧洲| 欧美freesex黑人又粗又大| 亚洲电影在线观看| 国产尤物在线视频| 久久久三级国产网站| 蜜桃免费在线视频| 色婷婷一区二区三区| 成人欧美一区二区三区在线| 老司机av在线免费看| 日韩一区二区电影在线| 国产亚洲精久久久久久无码77777| 成人动漫一区二区三区| 精品国产免费av| 欧美日韩在线观看视频小说| 国产日产欧美精品| 菠萝蜜视频国产在线播放| 欧美大黄免费观看| 精品在线播放视频| 国产三级一区二区| 1314成人网| 亚洲国产专区校园欧美| 任我爽在线视频精品一| 国产福利亚洲| 欧美福利视频在线| 青青草免费在线| 欧美日韩一区二区三区在线看| 欧美激情精品久久久久久免费 | 日本人亚洲人jjzzjjz| 久久超碰97中文字幕| 国产 欧美 日本| 亚洲素人在线| 成人亲热视频网站| 国产自产自拍视频在线观看| 亚洲性69xxxbbb| 国产熟女一区二区三区四区| 精品日韩美女的视频高清| 丁香激情五月少妇| 国产不卡视频一区| 一本色道无码道dvd在线观看| 国产精品成人av| 精品国产乱码久久久久久久软件| 日韩一区二区三区免费| 欧美激情中文字幕乱码免费| 国产福利在线观看| 精品国内二区三区| 最近日韩免费视频| 五月婷婷欧美视频| 欧美xxxooo| 2020国产精品| 国产高潮失禁喷水爽到抽搐 | 久久久久国产精品区片区无码| 久久99久久精品| 国产三区在线视频| 欧美啪啪一区| 亚洲一区二区三区免费观看| 先锋影音国产精品| 91精品国产99久久久久久红楼 | 国产又黄又粗视频| 成人h版在线观看| www,av在线| 日韩电影在线观看一区| 国产一级爱c视频| 中文字幕免费精品| 神马影院我不卡午夜| 激情小说一区| 97在线电影| 国产美女视频一区二区| 国产精品扒开腿做| 中文字幕色婷婷在线视频| 欧美激情成人在线视频| 伦xxxx在线| 中文字幕日韩专区| 黄色影院在线播放| 日韩精品在线视频| 秋霞av鲁丝片一区二区| 日韩精品一区二区三区四区视频| 在线观看免费中文字幕| 在线观看网站黄不卡| 天天操夜夜操视频| 欧美午夜影院在线视频| 亚洲精品1区2区3区| 香蕉乱码成人久久天堂爱免费| 欧美老熟妇一区二区三区| 国产精品久久影院| 五月激情四射婷婷| 国产无人区一区二区三区| 国产精品无码一区二区三区免费| 成人免费毛片嘿嘿连载视频| 国产精品偷伦视频免费观看了| 精品亚洲免费视频| 欧美性猛交xxxx乱大交91| 久久99精品一区二区三区| 欧美午夜aaaaaa免费视频| 日本亚洲欧美天堂免费| 日韩av手机版| 久久99国内精品| 日本黄色的视频| 国产真实乱子伦精品视频| www.色就是色.com| 国产乱码精品一区二区三区忘忧草 | 亚洲美女激情视频| 欧美91精品久久久久国产性生爱| 亚洲精品视频免费| 国产精品免费观看| 色狠狠久久aa北条麻妃| 国产盗摄在线观看| 欧美猛男性生活免费| www.8ⅹ8ⅹ羞羞漫画在线看| 国模精品视频一区二区| 麻豆视频在线看| 国产精品高清在线观看| 成人在线视频免费| 成人福利网站在线观看| 永久免费精品视频| 看高清中日韩色视频| 欧美丝袜一区| 久久亚洲a v| 中文在线不卡| 手机视频在线观看| 国产麻豆视频一区二区| 中文字幕 日本| 国产亚洲一区二区三区| 人人艹在线视频| 亚洲国产美女搞黄色| 久久精品视频7| 制服丝袜中文字幕亚洲| 免费看av毛片| 日韩在线视频观看正片免费网站| 亚洲第一图区| 国产成人一区二区| 久久久久久亚洲精品美女| 黑人巨大精品欧美一区二区小视频| 国产真实有声精品录音| 欧美日韩视频免费在线观看| 99精品国产福利在线观看免费| 妺妺窝人体色www在线观看| 国产精品亚洲午夜一区二区三区| 中文字幕一区二区久久人妻网站| 国产精品久久久久久久久果冻传媒| 国产亚洲欧美精品久久久久久| 在线日韩一区二区| 国产香蕉在线观看| 视频直播国产精品| 狠狠躁少妇一区二区三区| 国产精品永久免费观看| 国产精品网在线观看| 亚洲国产欧美一区二区三区不卡| 狠狠综合久久| 欧美一级视频在线| 久久精品亚洲麻豆av一区二区 | 日本一级片免费| 欧美性生交xxxxxdddd| 精品人妻午夜一区二区三区四区| 亚洲欧洲中文天堂| eeuss鲁一区二区三区| 国产欧美一区二区白浆黑人| 日本一区福利在线| 四虎4hu永久免费入口| 日韩黄色小视频| 亚洲天堂美女视频| 亚洲精品高清在线| 中文字幕在线观看视频一区| 亚洲免费高清视频| 91九色美女在线视频| 亚洲一区中文字幕| 日韩av在线播放网址| 欧美 激情 在线| 成人激情小说网站| 欧美成人一二三区| 欧美顶级少妇做爰| 亚洲图片88| 国产精品美女久久| 免费成人av| 日本成年人网址| www.亚洲免费av| 国产无码精品久久久| 日韩欧美在线影院| a视频在线播放| 亚洲aaaaaa| 中文字幕人成人乱码| 99九九精品视频| 亚洲欧洲精品天堂一级| 中文字幕一区二区三区人妻四季 | 欧美三级在线免费观看| 欧美日韩国产首页| 思思99re6国产在线播放| 国产精品视频大全| 成人动漫免费在线观看| 久久久久久久少妇| 国产亚洲成aⅴ人片在线观看| 天堂а√在线中文在线新版| 日韩av在线直播| 免费高潮视频95在线观看网站| 国产在线精品二区| 国产一区二区精品| 中文字幕在线看高清电影| 色婷婷激情综合| 成人在线播放视频| 国产伦精品免费视频| 国产精品x453.com| 国产成人强伦免费视频网站| 一区二区三区自拍| 丰满熟妇人妻中文字幕| 97在线视频免费| 少妇精品久久久一区二区三区| 国产xxxxx视频| 国产精品日韩精品欧美在线| 国产又粗又黄又爽| 九九九久久久久久| 免费看久久久| 天天干在线影院| 椎名由奈av一区二区三区| 性欧美videos另类hd| 国语自产精品视频在线看一大j8 | 99v久久综合狠狠综合久久| 亚洲男人第一av| 伊人精品在线观看| 免费一区二区三区在线视频| 免费拍拍拍网站| 久久久亚洲精品石原莉奈| 影音先锋国产在线| 欧美情侣性视频| 一区二区三区视频免费观看| 在线观看高清免费视频| 一区二区三区中文字幕在线观看| 日本黄色三级视频| 国产精品欧美风情| 欧美日韩99| 国产精品成人一区二区三区电影毛片| 欧美日韩精品一二三区| 欧美极品少妇videossex| 欧美高清性xxxxhdvideosex| 久久精品72免费观看| 日本网站在线免费观看| 永久免费看mv网站入口亚洲| 免费一级欧美片在线观看网站| 能在线观看的av| 亚洲精品视频在线| 内衣办公室在线| av一区观看| 蜜桃精品在线观看| 日韩在线视频免费播放| 久久九九免费视频| 香蕉久久夜色精品国产更新时间| 亚洲精品视频三区| 欧美午夜精品久久久久久浪潮| av文字幕在线观看| 奇米精品在线| 成人毛片老司机大片|