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

簡單聊聊對象淺拷貝和深拷貝,真不簡單!

開發 前端
本文主要圍繞對象的淺拷貝和深拷貝,從使用方面做了一次簡單的內容總結。淺拷貝下,原對象和目標對象,引用都是同一個對象,當被引用的對象數據發生變化時,相關的引用者也會跟著一起變。

一、摘要

上篇文章中,我們有介紹到對象屬性復制相關的工具,這些工具所進行的對象拷貝,其實都是淺拷貝模式。

可能有的同學會發出疑問,什么叫淺拷貝?

我們都知道,Java 中的數據類型分為值類型(基本數據類型)和引用類型,值類型包括 byte、short、 int、long、float、double、boolean、char 等簡單數據類型,引用類型包括類、接口、數組等復雜類型。

根據數據類型的不同,在進行屬性值拷貝的時候,如果是值類型,復制的是屬性值,如果是復雜類型,比如對象,復制的內容可能是屬性對應的內存引用地址。

因此,在 Java 中對于復雜類型的數據,也分為**淺拷貝(淺克隆)與深拷貝(深克隆)**方式,區別如下:

  • 淺拷貝:將原對象或原數組的引用直接賦給新對象或者新數組,新對象只是原對象的一個引用,也就是說不管新對象還是原對象,都是引用同一個對象
  • 深拷貝:創建一個新的對象或者數組,將原對象的各項屬性的值拷貝過來,是“值”而不是“引用”,兩者對象是不一樣的

對于概念的解釋,可能也很難理解,下面我們簡單的通過幾個案例向大家介紹!

二、案例實踐

2.1、淺拷貝

首先我們新建兩個對象,其中User關聯Account對象,內容如下:

public class User {

    /**
     * 用戶ID
     */
    private Long userId;

    /**
     * 賬戶信息
     */
    private Account account;

    //...get、set

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", account=" + account +
                '}';
    }
}
public class Account {

    /**
     * 賬號余額
     */
    private BigDecimal money;

    //...get、set

    @Override
    public String toString() {
        return "Account{" +
                "money=" + money +
                '}';
    }
}

使用Spring BeanUtils工具進行對象屬性復制,操作如下:

// 定義某用戶,賬戶余額 100塊
Account sourceAccount = new Account();
sourceAccount.setMoney(BigDecimal.valueOf(100));

User sourceUser = new User();
sourceUser.setUserId(1L);
sourceUser.setAccount(sourceAccount);

// 進行對象屬性拷貝
User targetUser = new User();
BeanUtils.copyProperties(sourceUser, targetUser);
System.out.println("修改嵌套對象屬性值前的結果:" + targetUser.toString());

//修改原始對象賬戶余額為200
sourceAccount.setMoney(BigDecimal.valueOf(200));

System.out.println("修改嵌套對象屬性值后的結果:" + targetUser.toString());

輸出結果如下:

修改嵌套對象屬性值前的結果:User{userId=1, account=Account{money=100}}
修改嵌套對象屬性值后的結果:User{userId=1, account=Account{money=200}}

從結果上可以很明顯的得出結論:當修改原始的嵌套對象Account的屬性值時,目標對象的Account對象對應的值也跟著發生變化。

很顯然,這與我們預期想要的對象屬性拷貝是想違背的,我們所期待的結果是:原始對象值即使發生變化,目標對象的值也不應該發生變化!

面對這種情況,怎么處理呢?

我們可以把對象Account單獨拉出來,進行一次屬性值拷貝,然后再進行封裝,比如操作如下:

// 定義某用戶,賬戶余額 100塊
Account sourceAccount = new Account();
sourceAccount.setMoney(BigDecimal.valueOf(100));

User sourceUser = new User();
sourceUser.setUserId(1L);
sourceUser.setAccount(sourceAccount);


// 拷貝 Account 對象
Account targetAccount = new Account();
BeanUtils.copyProperties(sourceAccount, targetAccount);

// 拷貝 User 對象
User targetUser = new User();
BeanUtils.copyProperties(sourceUser, targetUser);
targetUser.setAccount(targetAccount);
System.out.println("修改嵌套對象屬性值前的結果:" + targetUser.toString());

//修改原始對象賬戶余額為200
sourceAccount.setMoney(BigDecimal.valueOf(200));

System.out.println("修改嵌套對象屬性值后的結果:" + targetUser.toString());

輸出結果如下:

修改嵌套對象屬性值前的結果:User{userId=1, account=Account{money=100}}
修改嵌套對象屬性值后的結果:User{userId=1, account=Account{money=100}}

即使Account對象數據發生變化,也不會改目標對象的數據,與預期結果一致!

現在的情況是User只有一個嵌套對象Account,假如像這樣的對象有十幾個呢,采用以上方式顯然不可取。

這個時候深拷貝,該登場了!

2.2、深拷貝

Java 的深拷貝有兩種實現方式,第一種是通過將對象序列化到臨時文件,然后再通過反序列化方式,從臨時文件中讀取數據,操作案例如下!

首先所有的類,必須實現Serializable接口,推薦顯式定義序列化 ID。

public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用戶ID
     */
    private Long userId;

    /**
     * 賬戶信息
     */
    private Account account;

    //...get、set

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", account=" + account +
                '}';
    }
}
public class Account implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 賬號余額
     */
    private BigDecimal money;

    //...get、set

    @Override
    public String toString() {
        return "Account{" +
                "money=" + money +
                '}';
    }
}
// 定義某用戶,賬戶余額 100塊
Account sourceAccount = new Account();
sourceAccount.setMoney(BigDecimal.valueOf(100));

User sourceUser = new User();
sourceUser.setUserId(1L);
sourceUser.setAccount(sourceAccount);


//把對象寫入文件中
try {
    FileOutputStream fos = new FileOutputStream("temp.out");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(sourceUser);
    oos.flush();
    oos.close();
} catch (IOException e) {
    e.printStackTrace();
}

//從文件中讀取對象
User targetUser = null;
try {
    FileInputStream fis = new FileInputStream("temp.out");
    ObjectInputStream ois = new ObjectInputStream(fis);
    targetUser = (User) ois.readObject();
    fis.close();
    ois.close();
}  catch (Exception e) {
    e.printStackTrace();
}

System.out.println("修改嵌套對象屬性值前的結果:" + targetUser.toString());

//修改原始對象賬戶余額為200
sourceAccount.setMoney(BigDecimal.valueOf(200));

System.out.println("修改嵌套對象屬性值后的結果:" + targetUser.toString());

輸出結果:

修改嵌套對象屬性值前的結果:User{userId=1, account=Account{money=100}}
修改嵌套對象屬性值后的結果:User{userId=1, account=Account{money=100}}

通過序列化和反序列化的方式,可以實現多層復雜的對象數據拷貝。

因為涉及到需要將數據寫入臨時磁盤,性能可能會有所下降!

2.3、json 序列化和反序列化

對于對象深度拷貝,還有第二種方式,那就是采用 json 序列化和反序列化相關的技術來實現,同時性能也比將數據寫入臨時磁盤的方式要好很多,并且不需要顯式實現序列化接口。

json 序列化和反序列化的底層思想是,將對象序列化成字符串;然后再將字符串通過反序列化方式成對象。

以jackson工具庫為例,具體使用方式如下!

首先導入相關的jackson依賴包!

<!--jackson依賴-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.8</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.8</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>

其次,編寫統一Json處理工具類!

public class JsonUtil {

    private static final Logger log = LoggerFactory.getLogger(JsonUtil.class);

    private static ObjectMapper objectMapper = new ObjectMapper();

    static {
        // 序列化時,將對象的所有字段全部列入
        objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
        // 允許沒有引號的字段名
        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
        // 自動給字段名加上引號
        objectMapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, true);
        // 時間默認以時間戳格式寫,默認時間戳
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
        // 忽略空bean轉json的錯誤
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        // 設置時間轉換所使用的默認時區
        objectMapper.setTimeZone(TimeZone.getDefault());


        // 反序列化時,忽略在json字符串中存在, 但在java對象中不存在對應屬性的情況, 防止錯誤
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

        //序列化/反序列化,自定義設置
        SimpleModule module = new SimpleModule();
        // 序列化成json時,將所有的long變成string
        module.addSerializer(Long.class, ToStringSerializer.instance);
        module.addSerializer(Long.TYPE, ToStringSerializer.instance);
        // 自定義參數配置注冊
        objectMapper.registerModule(module);
    }

    /**
     * 對象序列化成字符串
     * @param obj
     * @param <T>
     * @return
     */
    public static <T> String objToStr(T obj) {
        if (null == obj) {
            return null;
        }

        try {
            return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
        } catch (Exception e) {
            log.warn("objToStr error: ", e);
            return null;
        }
    }

    /**
     * 字符串反序列化成對象
     * @param str
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T strToObj(String str, Class<T> clazz) {
        try {
            return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);
        } catch (Exception e) {
            log.warn("strToObj error: ", e);
            return null;
        }
    }

    /**
     * 字符串反序列化成對象(數組)
     * @param str
     * @param typeReference
     * @param <T>
     * @return
     */
    public static <T> T strToObj(String str, TypeReference<T> typeReference) {
        try {
            return (T) (typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference));
        } catch (Exception e) {
            log.warn("strToObj error", e);
            return null;
        }
    }
}

最后,在相關的位置引入即可。

// 定義某用戶,賬戶余額 100塊
Account sourceAccount = new Account();
sourceAccount.setMoney(BigDecimal.valueOf(100));

User sourceUser = new User();
sourceUser.setUserId(1L);
sourceUser.setAccount(sourceAccount);

// json序列化、反序列化
User targetUser = JsonUtil.strToObj(JsonUtil.objToStr(sourceUser), User.class);
System.out.println("修改嵌套對象屬性值前的結果:" + targetUser.toString());

//修改原始對象賬戶余額為200
sourceAccount.setMoney(BigDecimal.valueOf(200));

System.out.println("修改嵌套對象屬性值后的結果:" + targetUser.toString());

輸出結果:

修改嵌套對象屬性值前的結果:User{userId=1, account=Account{money=100}}
修改嵌套對象屬性值后的結果:User{userId=1, account=Account{money=100}}

與預期一致!

三、小結

本文主要圍繞對象的淺拷貝和深拷貝,從使用方面做了一次簡單的內容總結。

淺拷貝下,原對象和目標對象,引用都是同一個對象,當被引用的對象數據發生變化時,相關的引用者也會跟著一起變。

深拷貝下,原對象和目標對象數據是兩個完全獨立的存在,相互直接不受影響。

至于當前對象數據,是應該走淺拷貝還是深拷貝模式好,完全取決于當前業務的需求,沒有絕對的好或者不好!

如果當前對象需要深拷貝,推薦采用 json 序列化和反序列化的方式實現,相比通過文件寫入的方式進行序列化和反序列化,操作簡單且性能高!

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2021-10-19 08:20:47

單例模式設計模式面試

2014-02-24 14:45:23

XPath開發工具

2017-12-25 15:35:36

iMac Pro芯片存儲

2020-12-16 07:36:46

Redis字符串數據

2017-08-16 13:30:05

Java深拷貝淺拷貝

2021-07-16 12:33:24

Javascript深拷貝淺拷貝

2022-07-26 08:07:03

Python淺拷貝深拷貝

2021-09-27 11:07:11

深拷貝淺拷貝內存

2020-08-03 08:24:26

原型模式拷貝

2018-09-26 14:37:17

JavaScript前端編程語言

2021-01-08 06:15:09

深拷貝淺拷貝寫時拷貝

2023-05-17 08:42:46

深拷貝Golang

2020-10-12 08:35:22

JavaScript

2024-03-15 15:03:23

2009-05-19 17:28:44

深拷貝淺拷貝clone()

2023-05-05 08:47:35

Java淺拷貝深拷貝

2025-04-27 09:45:58

JavaScript深拷貝淺拷貝

2018-05-10 14:20:18

前端JavaScript深拷貝

2022-09-30 15:03:09

C語言深拷貝淺拷貝

2024-08-02 08:43:24

JavaScript開發者工具箱深拷貝
點贊
收藏

51CTO技術棧公眾號

精品成人久久| 69堂精品视频在线播放| 国产精品77777| 午夜精品一区二区三区在线| 一二三不卡视频| 日韩av超清在线观看| 亚洲少妇最新在线视频| 国产成人亚洲欧美| 久久久久久在线观看| 性欧美69xoxoxoxo| 日韩高清不卡av| 亚欧激情乱码久久久久久久久| 黄网站app在线观看| 成人高清伦理免费影院在线观看| 国产成人精品在线| 麻豆视频在线观看| av亚洲免费| 亚洲电影av在线| 91制片厂毛片| 日韩大片免费观看| 亚洲精品高清在线| 日韩女优中文字幕| 99在线精品视频免费观看软件| 国产精品久久久亚洲一区| yw.139尤物在线精品视频| 一级国产黄色片| 日韩欧美高清一区二区三区| 欧洲在线/亚洲| 熟女少妇在线视频播放| 久久99精品久久久久久野外| 国产亚洲精品中文字幕| 国产日韩欧美一区二区| 国产农村老头老太视频| 奇米影视在线99精品| 欧美在线观看日本一区| 国产精彩视频在线观看| 亚洲成人免费| 日韩网站免费观看高清| 欧美黄色一级生活片| 国内精品偷拍| 欧美va天堂va视频va在线| 在线观看免费视频高清游戏推荐| jizz内谢中国亚洲jizz| 午夜精品123| 国产精品视频二| 成人在线直播| 亚洲日本丝袜连裤袜办公室| 亚洲午夜在线观看| 中文字幕在线观看日本| 久久久久久久综合狠狠综合| 激情伦成人综合小说| 免费国产精品视频| 成人爱爱电影网址| 岛国视频一区| 日本美女一级片| 99久久精品国产观看| 国产精品一区二区三区精品| 人妻精品一区一区三区蜜桃91 | 日日夜夜精品视频免费观看 | 91精品婷婷国产综合久久| 午夜视频你懂的| 久久久国产精品网站| 欧美日韩久久久一区| 色乱码一区二区三区在线| 国产福利亚洲| 欧美丰满少妇xxxbbb| 日本人视频jizz页码69| www欧美在线观看| 日韩欧美黄色影院| 一区二区免费在线观看视频| 日韩精品导航| 亚洲视频在线观看视频| 国产123在线| 天天揉久久久久亚洲精品| 久久亚洲精品毛片| 九九热视频精品| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产精品久久久久久久久久久久久久 | 日韩和的一区二在线| 欧美写真视频网站| 999久久久精品视频| 欧美经典影片视频网站| 日韩综合在线视频| 亚洲影院理伦片| 日韩黄色片在线| 狠狠操一区二区三区| 在线视频欧美精品| 加勒比av中文字幕| 伊人久久影院| 亚洲色图日韩av| 国产成人在线网址| 欧美亚洲不卡| 欧美一级大片在线免费观看| 中文字幕一区二区在线视频 | 国产经典自拍视频在线观看| 国产精品情趣视频| 精品人妻大屁股白浆无码| 日本在线啊啊| 911国产精品| 中文字幕av观看| 成人在线免费视频观看| 欧美精品第一页在线播放| 一级一片免费看| 国模大尺度一区二区三区| 国产精品一区二区av| 五月天婷婷在线视频| 亚洲国产日产av| 999在线观看| 免费福利视频一区| 久久综合伊人77777蜜臀| aaa人片在线| 国产成人精品亚洲777人妖| 亚洲国产日韩欧美在线99| 精品免费国产| av电影在线观看一区二区三区| 一区二区三区成人| 乌克兰美女av| 亚洲精品蜜桃乱晃| 九色精品免费永久在线| 一级黄色片在线看| 久久久综合精品| 草b视频在线观看| 亚洲伊人精品酒店| 亚洲少妇中文在线| 日本视频免费在线| 国产成人精品免费在线| 最新不卡av| 国产极品嫩模在线观看91精品| 亚洲成成品网站| 免费在线一级片| 久久99精品久久只有精品| 欧美久久久久久| 黄频免费在线观看| 精品国产91久久久久久久妲己 | 日韩中文首页| 国产成人精品视频在线| 视频一区二区三区在线看免费看| 一区二区三区中文在线| 中文字幕22页| 91中文字幕精品永久在线| 国产成人综合久久| 久蕉在线视频| 日本韩国视频一区二区| 国产一级二级在线观看| 亚洲国产精品一区| 国产亚洲精品久久飘花| av日韩国产| 亚洲精品www久久久久久广东| 久草视频在线免费看| 国产精品一二三区| 色婷婷777777仙踪林| 国产视频一区二| 不卡av电影院| 国内老熟妇对白xxxxhd| 一区二区三区在线影院| 久久久男人的天堂| 极品av少妇一区二区| 国产欧美在线一区二区| 亚洲第一av| 亚洲美女久久久| 日本黄色中文字幕| 国产精品你懂的| 欧美在线a视频| 亚洲视频观看| 精品视频导航| 性欧美18一19sex性欧美| 一区二区三区四区精品| 11024精品一区二区三区日韩| 国产精品欧美一区喷水| 久久久久xxxx| 激情综合久久| 欧美日韩一区二区三区免费| 美女色狠狠久久| 久久综合免费视频影院| 好吊视频一区二区三区| 欧美日韩一区二区在线播放| 在线观看日本中文字幕| 麻豆精品国产91久久久久久| 潘金莲一级淫片aaaaaa播放1| 亚洲福利合集| 奇门遁甲1982国语版免费观看高清| 飘雪影院手机免费高清版在线观看| 91久久精品一区二区三区| 国产视频精品免费| 成人午夜精品在线| 欧在线一二三四区| 在线中文一区| 欧美精品在线一区| 国产精品2区| 久久精品一区八戒影视| 欧美在线不卡区| 香蕉视频在线播放| 欧美精品一区二区三区在线播放 | 欧美性大战xxxxx久久久| 朝桐光av在线| 2021久久国产精品不只是精品| 波多野结衣xxxx| 亚洲小说区图片区| 亚洲精品视频一区二区三区| 成人爽a毛片| 国产精品福利在线观看网址| 色yeye免费人成网站在线观看| 国产网站欧美日韩免费精品在线观看 | 精品国产一区二区三区麻豆免费观看完整版 | 黄色在线看片| 国产一区二区三区免费视频| 精品国产伦一区二区三区| 日韩欧美在线视频| 九九久久免费视频| 国产精品久久久久国产精品日日| 在线播放第一页| 久久er精品视频| 无码人妻h动漫| 激情久久中文字幕| 亚洲av综合色区| 欧美天天综合| 久久一区二区三区av| 日韩激情精品| 国产有码一区二区| 欧美特大特白屁股xxxx| 久久久爽爽爽美女图片| 麻豆传媒在线完整视频| 亚洲人免费视频| 熟妇人妻系列aⅴ无码专区友真希| 欧美剧情片在线观看| 中文字幕一区二区三区四区欧美| 亚洲aⅴ怡春院| 麻豆91精品91久久久| 亚洲丝袜自拍清纯另类| 日韩av片在线免费观看| 久久久久久97三级| 亚洲自拍偷拍一区二区| av资源网一区| 精品人妻伦一二三区久| 国产精品18久久久久久久久| 午夜精品久久久久久久99热影院| 日韩精品久久理论片| 美女福利视频在线| 国产日韩1区| 日韩免费一级视频| 亚洲日本免费| 蜜臀av无码一区二区三区| 欧美午夜电影在线观看 | 一本色道久久88| 国产欧美日产一区| 97人妻人人揉人人躁人人| 久久综合色鬼综合色| 国产精品无码电影| av激情综合网| 国产精品久久不卡| 久久精品亚洲国产奇米99| 精品少妇人妻一区二区黑料社区| 97se亚洲国产综合自在线观| 中出视频在线观看| 91看片淫黄大片一级| 欧美丰满少妇人妻精品| 久久亚洲精精品中文字幕早川悠里| 91精品小视频| 久久久久久电影| 国产传媒在线看| 亚洲色图19p| 久久久.www| 亚洲成人午夜电影| 欧美一区二区三区网站| 日本久久一区二区三区| 中文无码av一区二区三区| 欧美日韩日本视频| 国产成人精品a视频| 精品久久久久久综合日本欧美| 开心激情综合网| 国产视频精品久久久| 国产区视频在线| 久久资源免费视频| av影院在线免费观看| 青青草国产精品一区二区| 日本欧美不卡| 91免费看网站| 校园春色另类视频| 一级一片免费播放| 亚洲高清免费| 中文字幕在线导航| 国产精品一区二区在线观看不卡 | 国产手机av在线| 亚洲国产91精品在线观看| 久热av在线| 色综合久久悠悠| 在线视频cao| 成人免费视频97| 加勒比中文字幕精品| 日韩欧美一区二区三区四区五区| 久久久9色精品国产一区二区三区| www.亚洲成人网| 日本欧美一区二区三区| 特级特黄刘亦菲aaa级| 国产日韩欧美精品一区| 劲爆欧美第一页| 色噜噜偷拍精品综合在线| 99久久精品国产成人一区二区| 日韩黄色在线免费观看| 一级毛片视频在线观看| 91国产一区在线| 国产乱码精品一区二区三区亚洲人| 国产偷久久久精品专区| 99久久99视频只有精品| 免费黄色福利视频| 国产电影精品久久禁18| 亚洲国产天堂av| 亚洲香蕉伊在人在线观| 在线播放精品视频| 日韩av网址在线观看| 国产黄a三级三级三级av在线看| 2019日本中文字幕| 欧美欧美在线| 在线一区亚洲| 久久亚洲综合| 国产精品九九视频| 亚洲综合一区二区| 伊人成人在线观看| 亚洲欧美日韩成人| 国产三级电影在线播放| 99久久综合狠狠综合久久止| 91视频综合| 亚洲天堂2018av| 国产无人区一区二区三区| 国产成人精品片| 精品88久久久久88久久久| 国产丝袜在线| 91精品久久久久久久久久入口| 国产剧情一区| 亚洲精品无码久久久久久| 北条麻妃国产九九精品视频| a级黄色片免费看| 91精选在线观看| 秋霞成人影院| 国产精品专区一| 青青草成人影院| 欧美三级理论片| 国产欧美日韩综合精品一区二区| 伊人手机在线视频| 日韩久久免费电影| 三级在线看中文字幕完整版| 国产精品一区二区免费| 亚洲人成免费| 三叶草欧洲码在线| 色综合久久66| 精品视频一二区| 国产精品福利久久久| 残酷重口调教一区二区| 2025韩国理伦片在线观看| 中文字幕第一页久久| 中文字幕在线网站| 日韩中文有码在线视频| 国产95亚洲| 国产欧美久久久久| 成人免费视频一区二区| 日韩av片在线播放| 日韩av在线免费播放| 成人性生交大片免费网站| 日本精品一区二区三区视频| 日本午夜一区二区| 一区二区成人免费视频| 日韩欧美一区二区在线视频| 免费不卡av| 精品久久蜜桃| 日韩精品免费专区| 污污的视频在线免费观看| 精品噜噜噜噜久久久久久久久试看| 999福利在线视频| 日本不卡一区| 国产综合久久久久久鬼色| 私库av在线播放| 亚洲精品久久久久中文字幕二区| 日本不卡一二三| 一区二区三区在线视频111| 国产福利一区二区三区| 国产又爽又黄的视频| 中文字幕一区二区精品| 日本精品在线播放| 日本福利视频在线| 中文字幕不卡在线| 精品国产va久久久久久久| 91精品国产91久久久久久| 成人一级毛片| 国产伦理在线观看| 91激情五月电影| 女囚岛在线观看| 日本一区高清在线视频| 国产伦精品一区二区三区免费| 国产精品6666| 中文字幕成人精品久久不卡| 日韩在线观看中文字幕| 蜜臀av午夜一区二区三区| 亚洲人成人一区二区在线观看| 婷婷开心激情网| 成人精品视频99在线观看免费| 亚洲黄色高清| 夫妻性生活毛片| 亚洲欧美日韩第一区| 91精品短视频| 九九九在线观看视频|