精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美精品 国产精品| 亚洲视频1区2区| 欧美日韩一级黄| 一区二区三区欧美在线| 国产毛片在线视频| 99精品欧美| 欧美一区二区在线不卡| 欧洲av一区| 国产在线观看你懂的| 欧美a一欧美| 欧美三级韩国三级日本一级| 青青草视频国产| 欧美高清成人| 亚洲精一区二区三区| 亚洲欧美一区二区三区情侣bbw| 日本中文字幕精品—区二区| 国模雨婷捆绑高清在线| 亚洲国产成人在线| 国产极品jizzhd欧美| 91杏吧porn蝌蚪| 久久av免费| 精品久久久影院| www.夜夜爽| 五月天国产在线| 亚洲精品视频自拍| 手机成人在线| 日韩成人黄色| 国产91色综合久久免费分享| 国产狼人综合免费视频| 亚洲免费黄色网址| 激情久久久久久久| 久久综合免费视频| 手机看片国产精品| 欧美日韩国产网站| 欧美性猛交xxxx免费看久久久| 可以在线看黄的网站| 国产夫妻在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 国内伊人久久久久久网站视频 | 亚洲另类色综合网站| 亚洲开发第一视频在线播放| 在线观看国产小视频| 国产亚洲一级| 97在线观看视频| 欧美交换国产一区内射| 亚洲a在线视频| 精品国产拍在线观看| 欧美成人短视频| 成人区精品一区二区婷婷| 亚洲欧洲成视频免费观看| a天堂视频在线观看| 亚洲图色一区二区三区| 日韩精品一区二区三区老鸭窝| 91插插插影院| 精品国产不卡一区二区| 91麻豆精品国产自产在线观看一区 | 国产在线88av| 午夜影院久久久| 日韩国产一级片| 18aaaa精品欧美大片h| 99精品偷自拍| 国偷自产av一区二区三区小尤奈| 国产成人自拍一区| 9i在线看片成人免费| 狠狠色噜噜狠狠狠狠色吗综合| 日本精品一区二区在线观看| 天堂午夜影视日韩欧美一区二区| 欧美亚洲另类制服自拍| 国产免费一级视频| 男人操女人的视频在线观看欧美| 国产精品一香蕉国产线看观看| 一级成人免费视频| 国产乱子轮精品视频| eeuss一区二区三区| 丰满熟妇人妻中文字幕| 成人av综合在线| 久久精品国产精品国产精品污 | 伊人久久影院| 亚洲国产精品免费| 国产熟妇搡bbbb搡bbbb| 成人影院在线| 色综合老司机第九色激情| 国产午夜精品无码一区二区| 久久久精品日韩| 成人看片人aa| 俄罗斯嫩小性bbwbbw| xfplay精品久久| 亚洲一区二区免费视频软件合集 | 亚洲精品水蜜桃| 国产精品无码av在线播放| 日韩经典一区| 日韩欧美高清dvd碟片| 黄色污在线观看| 欧美一区电影| 欧美激情亚洲综合一区| 波多野结衣日韩| 国产精品一区二区你懂的| 久久草.com| 免费黄网站在线播放| 97精品超碰一区二区三区| 日韩精品不卡| 男女视频在线| 欧美午夜一区二区三区免费大片| 午夜性福利视频| 国产精品一区高清| 欧美国产极速在线| 中文精品久久久久人妻不卡| 国产成人亚洲综合a∨婷婷图片 | 日韩精品一区二区三区高清免费| 精品一区二区三| 亚洲精品国产精品国产自| 日本美女bbw| 宅男噜噜噜66一区二区 | 91亚洲视频在线观看| 成人av免费在线| 成人手机视频在线| 校园春色亚洲色图| 亚洲精品美女久久久久| 久草网站在线观看| 中文字幕一区二区三区久久网站| 欧美综合第一页| 亚洲精品911| 亚洲天堂精品视频| www.xxx亚洲| 亚州综合一区| 日韩精品视频三区| 妺妺窝人体色www在线下载| 青娱乐精品在线视频| 久久99精品久久久久子伦 | jiujiure精品视频播放| 91精品国产亚洲| 亚洲精品人妻无码| 亚洲免费观看高清完整版在线观看| 日本男人操女人| 综合亚洲色图| 欧美在线视频免费播放| 色一情一乱一乱一区91av| 一区二区三区中文字幕在线观看| wwwwwxxxx日本| 日本久久黄色| 国产精品亚洲自拍| 亚洲xxxxxx| 在线观看91视频| 在线免费观看视频| 日韩电影在线观看一区| 日韩中文字幕一区| 99九九久久| 色综合亚洲精品激情狠狠| 国产乱码77777777| 日本一区二区免费在线| 九九热精品在线播放| 欧美午夜精彩| 国产一区二区在线免费视频| 成人18在线| 欧美在线一二三四区| 嘿嘿视频在线观看| 久久草av在线| 国产尤物av一区二区三区| 1204国产成人精品视频| 久久久久久成人| 天堂网在线资源| 日韩欧美a级成人黄色| 国产伦理片在线观看| 青青青伊人色综合久久| 亚洲欧美日韩不卡| 亚洲视频国产| 91精品国产91久久久久久久久| 日韩在线免费播放| 欧美性感一区二区三区| 国产精品 欧美激情| 成人永久看片免费视频天堂| 国产毛片视频网站| 先锋欧美三级| 日韩欧美123| 国产第一页在线播放| 99re热这里只有精品视频| 日本成年人网址| 91一区二区| 国产精品免费观看高清| 欧美xxxx做受欧美护士| 久久综合88中文色鬼| 无码精品在线观看| 欧美日韩你懂的| 久久久久久久久久91| 美洲天堂一区二卡三卡四卡视频| 正在播放精油久久| 国产精品巨作av| 国产精品av在线播放| 国产激情在线视频| 日韩av一区二区在线观看| 亚洲精品91天天久久人人| 亚洲激情综合网| 日韩一级av毛片| 国产成都精品91一区二区三| 男女午夜激情视频| 综合色一区二区| 日韩av在线一区二区三区| 视频一区日韩| 久久大大胆人体| 日本在线丨区| 日韩欧美一区二区在线视频| 成年人视频免费| 午夜精品久久久久久久99水蜜桃| 成人性视频免费看| 久久综合资源网| 成年人性生活视频| 青草国产精品久久久久久| 妞干网在线视频观看| 久久久久国产精品| 欧美日韩国产高清视频| 97一区二区国产好的精华液| 国产精品中文字幕在线观看| 中文字幕在线看片| 欧美国产日韩一区二区三区| jizz在线观看中文| 亚洲九九九在线观看| 黄色一级大片在线免费看国产| 欧美日韩免费一区二区三区视频 | aaa大片在线观看| 在线不卡一区二区| 91在线视频在线观看| 亚洲高清不卡在线| 永久免费看黄网站| 最新欧美精品一区二区三区| 激情成人在线观看| 美女性感视频久久| 无人在线观看的免费高清视频| 一本久久知道综合久久| www污在线观看| 欧美成人亚洲| 亚洲色婷婷久久精品av蜜桃| 国产精品久久久久久麻豆一区软件 | 国产51人人成人人人人爽色哟哟| 日韩国产高清视频在线| 亚洲精品一区二区三区四区| 欧美一区二区三区播放老司机| 国产精品久久久久久免费免熟| 欧美三级韩国三级日本三斤| 中文字幕av网站| 欧美日韩激情一区二区| 中文字幕 亚洲视频| 欧美午夜精品久久久| www.亚洲激情| 欧美性淫爽ww久久久久无| 亚洲高清在线看| 欧美午夜一区二区三区| 国产精品xxxxxx| 欧美日韩中字一区| 91禁在线观看| 91精品国产综合久久久蜜臀图片| 国产精品一级二级| 日韩三级精品电影久久久| 亚洲黄色一级大片| 日韩高清不卡av| 搞黄视频免费在线观看| 色哟哟入口国产精品| 大片免费在线观看| 欧美激情videoshd| 国产污视频在线播放| 国产成人精品一区二区| 福利一区二区免费视频| 国产有码一区二区| 视频精品国内| 久久资源av| 青青草国产免费一区二区下载 | av不卡在线看| 欧美综合在线观看视频| 91精品国产自产拍在线观看蜜| 天堂av免费看| 亚洲高清激情| 亚洲成熟丰满熟妇高潮xxxxx| 日韩福利电影在线观看| 亚洲在线观看网站| 99久久99久久精品免费看蜜桃| 久久精品国产亚洲av麻豆| 国产精品视频在线看| 欧美被狂躁喷白浆精品| 欧美色欧美亚洲高清在线视频| 中文字幕资源网| 欧美不卡一区二区三区| 免费黄色片在线观看| 久久精品免费电影| 77thz桃花论族在线观看| 国产精品极品美女粉嫩高清在线| hd国产人妖ts另类视频| 国产91色在线|免| 日本伊人久久| 欧美日本韩国国产| 欧美二区视频| 久久久久久久久久久久久久国产| 激情六月婷婷久久| 亚洲欧美色图视频| 综合电影一区二区三区| 日韩在线视频免费播放| 欧美精品国产精品| 深夜福利在线视频| 久久成人免费视频| 欧美大胆成人| www.成人三级视频| 成人影视亚洲图片在线| 日韩伦理在线免费观看| 精品一区二区久久久| 蜜臀av一区二区三区有限公司| 亚洲人成网站在线| 无码视频在线观看| 亚洲第一网站免费视频| 黄色免费网站在线| 国产成人精品视频在线观看| 久久久久高潮毛片免费全部播放| 成人动漫视频在线观看免费| 欧美精品乱码| 国产午夜大地久久| 国产精品综合在线视频| 精品少妇一区二区三区免费观| 亚洲免费观看高清在线观看| 中文字幕第三页| 亚洲欧美色婷婷| 成人bbav| 国产成人精品日本亚洲11| 999国产精品视频| 成人性生生活性生交12| 久久综合色婷婷| 日韩成年人视频| 欧美电视剧在线看免费| 日本不卡视频| 国产精品视频精品| 国产视频一区二| 亚洲欧洲久久| 理论电影国产精品| 国产精品18在线| 在线观看一区二区视频| 欧美日本网站| 茄子视频成人在线| 免费国产自久久久久三四区久久| 人妻无码久久一区二区三区免费| 国产成人在线视频网站| 久草视频在线免费看| 欧美一级欧美三级| 亚洲羞羞网站| 99九九视频| 在线欧美三区| 国产黄色三级网站| 婷婷开心激情综合| 午夜视频免费看| 555www成人网| 欧美人与拘性视交免费看| 欧美视频第一区| 国产日韩欧美综合一区| 久久久久久av无码免费看大片| 亚洲天堂第一页| 91国内外精品自在线播放| 亚洲图片都市激情| 激情图片小说一区| 日本中文字幕免费在线观看| 欧美一二三四区在线| 精品精品导航| 鲁丝一区鲁丝二区鲁丝三区| 噜噜噜躁狠狠躁狠狠精品视频| 五月天精品视频| 欧美日韩日日骚| 牛牛在线精品视频| 就去色蜜桃综合| 奇米影视一区二区三区小说| 五月天色婷婷丁香| 欧美成人一区二区三区在线观看 | 国内精品久久久久久99蜜桃| 国产福利影院在线观看| 中文字幕亚洲精品在线观看| 精品国产伦一区二区三区| 国产69精品久久久久9| 你懂的一区二区三区| 男生操女生视频在线观看| 亚洲激情一二三区| 天堂中文在线8| 国产女精品视频网站免费| 欧美日韩专区| 污污网站免费观看| 一卡二卡欧美日韩| 欧美69xxxxx| 91亚洲精品一区| 国产欧美一级| 久久久久久久麻豆| 亚洲国产欧美日韩精品| 日本久久免费| 69精品丰满人妻无码视频a片| 久久女同精品一区二区| 国产视频一区二区三| 91国内精品久久| 欧美韩日一区| 北岛玲一区二区| 91精品国产福利在线观看| 在线手机中文字幕| 日本福利视频导航| 99re这里只有精品视频首页| 97视频免费在线| 日本精品在线视频| 国产一区观看| 精品女人久久久| 亚洲欧洲国产伦综合| 亚洲精品在线国产|