1 equals(eq日)和==的不同

equals方法是java.lang.Object类的方法

有两种用法说明:

一、对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。 1、“==”比较两个变量本身的值,即两个对象在内存中的首地址。 (java中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属性)

这个是他们的定义

前几天遇到一个奇葩的事情,同事说的,我刚开始以为是我菜,不知道这个

前几天同事不是写一个枚举吗

public enum DeliveryStatusEnum {

    cancel(1,"取消"),

    noPay(2,"待付款"),

    noDelivery(3,"待提货"),

    close(4,"已关闭"),

    finish(5,"已完成"),

    RefoundIng(7,"售后中"),

    RefoundFinsh(8,"售后完成"),

    fill(8,"填充状态");

    public Integer code;

    public String msg;

    private DeliveryStatusEnum(Integer code, String msg) {

        this.code = code;

        this.msg = msg;

    }

}

奇葩来了 他写一个

tradeCoreOrderServerRemoteFacade.orderNoSend(detailByDeliveryNo.getOrderNo()).equals(1)

我当场迷了,这个是什么,为什么可以这样,他回答,假设他传递是long,只有 Integer(应的解)才能==,这样可以比较2个数字的地址

那真实的情况是什么

 public class Test11 {

    public static void main(String[] args) {

       Long  j=1L;

       Integer k=1;

       int l=1;

       long o=1;

       long p=1L;

       if (j==1){

           System.out.println("1111111");

       }

       if (k == 1){

           System.out.println("2222222222222222");

       }

       if (l==1){

           System.out.println("333333333333");

       }

       if (o==1){

           System.out.println("4444444444444444444444");

       }

       if (p==1){

           System.out.println("5555555555555555555555555");

       }

       if (j.equals(1)){

           System.out.println("66666666666666666666666666666");

       }

       if (j.equals("1")){

           System.out.println("77777777777777777777");

       }

       if (k.equals("1")){

           System.out.println("88888888888888888888888888");

       }

       if (k.equals(1)){

           System.out.println("9999999999999999999999999999999999999");

       }

    }

}

测试一下 没有错误equals("1")和equals(1) 不会出现问题

看结果

1111111

2222222222222222

333333333333

4444444444444444444444

5555555555555555555555555

9999999999999999999999999999999999999

所有说,他说的不对

对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其,对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。 再测试一个小数

public class Test11 {

    public static void main(String[] args) {

Double  gs=0.98;

double  kk=0.098;

Float jj=0.98f;

           if (jj.equals("0.98")){

              System.out.println("111111111111");

    }

       if (jj.equals(0.98)){

           System.out.println("2222222222222222222222");

       }

       if (gs==0.98){

           System.out.println("3333333333333");

       }

    }

}

2222222222222222222222

3333333333333

所有建议数字还是==,字符串才比较地址

至于为什么去看我以前写过的字符串源码分析

== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。

注意

对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。 大家要分清,不要说出来要别人感觉你比较搞笑,你以为正确,但是别人最后发现你乱七八糟说的

奇葩问题2

public class Test11 {

    public static void main(String[] args) {

        List<User> list=new ArrayList();

        for (int i = 0; i < list.size(); i++) {

            System.out.println(list.get(i).getPassword());

        }

        for (User i:list) {

            System.out.println(i.toString());

        }

    }

}

假设集合都没有值的时候不会出现问题的,但是 测试

@RestController

class UserCotroller111 {

    @Autowired

    private UserService userService;

    @GetMapping("/cc")

    public String getMap(){

     return userService.select();

    }

    @GetMapping("/kk")

    public String getkk(){

        return userService.insert();

    }

}

xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.zhuzhumail.dao.Userdao">

    <select id="select" parameterType="com.zhuzhumail.entity.User" resultType="com.zhuzhumail.entity.User">

        SELECT * FROM `user`

    </select>

    <insert id="insert" parameterType="com.zhuzhumail.entity.User">

     insert into  `user`(`name`,password)   values (#{name},#{password})

    </insert>

    <insert id="insertByBatch" parameterType="java.util.List">

        INSERT INTO `user` VALUES

        <foreach collection="list" item="item" index="index" separator=",">

            (#{item.name},#{item.password})

        </foreach>

    </insert>

</mapper>

业务层

@Service

public class UserServiceimp implements UserService {

    @Autowired

    private Userdao userdao;

    @Override

    public String select() {

        System.out.println("11111111111111");

        List<User> list=new ArrayList();

        for (int i = 0; i < list.size(); i++) {

            userdao.insert(list.get(i));

        }

        return "成功";

    }

    @Override

    public String insert() {

        List<User> list=new ArrayList();

        userdao.insertByBatch(list);

        return "批量插入";

    }

}

发现批量插入是有问题的 插入的时候记得数据什么字段必须存在,不能为空,你传递是null也是会出现问题的

@Data

public class User implements Serializable {

    private Integer id;

    private String name;

//    private String password;

}

出现这种缺password也是会出现问题的 所有建议大家的插入在真实项目中进行手写,不要调用

这种的万能的 自己认为自己聪明都是会出现问题的

 <insert id="insertByPrimaryKey" parameterType="com.rome.cstore.infrastructure.dataobject.RefundOrderinfo"  useGeneratedKeys="true" keyProperty="id">

      INSERT into cstore_refund_order_info

      <trim prefix="(" suffix=")" suffixOverrides=",">

          <if test="orderId!=null">

              order_id

          </if>

      </trim>

      <trim prefix="values (" suffix=")" suffixOverrides=",">

         <if test="orderId!=null">

           #{orderId}

        </if>

      </trim>

  </insert>

这个跟更新的set一样会自动去调,但是最后一个不要加,

奇葩问题3

假设2张表进行相连有关系 ,但是

2种情况  连接条件是空和连接条件不存在

执行sql

SELECT * FROM staff sta  INNER JOIN  department de on sta.departmentid=de.departmentid

没有问题,我不知道为什么当时我同事出现这个问题 可能就是mysql版本高,出现问题

post的请求

@RequestParam(value = "deliveryCode") String deliveryCode也是可以使用这个的

还有记住集合的

可以进行判断 不适合进行删除,但是for不可以 可以实现一半判断不适合进行删除

public class Test11 {

    public static void main(String[] args) {

        List<User> list=new ArrayList();

        Iterator<User> iterator = list.iterator();

        while (iterator.hasNext()) {

            User next = iterator.next();

            if (next.getName().equals(":1")){

            }

            iterator.remove();

        }

    }

}

这个时候也是不会出现问题的

public class Test11 {

    public static void main(String[] args) {

        List<User> list=new ArrayList();

        User uid=new User();

        list.add(uid);

        User uid1=new User();

        list.add(uid1);

        //根据下标进行删除

        list.remove(1);

        for (int i = 0; i < list.size(); i++) {

            System.out.println(list.get(i));

        }

    }

}

填充值

public class Test11 {

    public static void main(String[] args) {

        List<User> list=new ArrayList();

        User uid=new User();

        list.add(uid);

        User uid1=new User();

        list.add(uid1);

        list.add(3,uid1);

        for (int i = 0; i < list.size(); i++) {

            System.out.println(list.get(i));

        }

    }

}

假设集合下标是3前面不存在2就会出现问题 但是使用数组就不会出现这个问题

public class Test11 {

    public static void main(String[] args) {

//        List<User> list=new ArrayList();

//        User uid=new User();

//

//        list.add(uid);

        User uid1=new User();

//        list.add(uid1);

//

//        list.add(3,uid1);

        User [] uid2=new User[122];

        uid2[9]=uid1;

        for (int i = 0; i <10; i++) {

            System.out.println(uid2[i]);

        }

    }

}

打印

null

null

null

null

null

null

null

null

null

User(id=null, name=null)

去除数组空值

    public static KqAbsenceDutyVo[] deleteArrayNull(KqAbsenceDutyVo[] kqAbsenceDutyVos2) {

        KqAbsenceDutyVo[] kqAbsenceDutyVos = kqAbsenceDutyVos2;

// 声明一个list

        List<KqAbsenceDutyVo> list = new ArrayList<>(kqAbsenceDutyVos2.length);

        for (KqAbsenceDutyVo str : kqAbsenceDutyVos) {

            list.add(str);

        }

        // 删除空的值

        while (list.remove(null)) ;

        while (list.remove("")) ;

// 将list 转换成数组

        KqAbsenceDutyVo[] list2 = (KqAbsenceDutyVo[]) list.toArray(new KqAbsenceDutyVo[]{new KqAbsenceDutyVo()});

// 返回删除空值后的数组

        return list2;

    }

项目经常用的时间工具类

@Slf4j

public class TimeUtils {

    private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

    // 获得当前月--开始日期

    public static String getMinMonthDate(String date) {

        Calendar calendar = Calendar.getInstance();

        try {

            calendar.setTime(dateFormat.parse(date));

            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));

            return dateFormat.format(calendar.getTime());

        } catch (java.text.ParseException e) {

            e.printStackTrace();

        }

        return null;

    }

    // 获得当前月--结束日期

    public static String getMaxMonthDate(String date){

        Calendar calendar = Calendar.getInstance();

        try {

            calendar.setTime(dateFormat.parse(date));

            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));

            return dateFormat.format(calendar.getTime());

        }  catch (java.text.ParseException e) {

            e.printStackTrace();

        }

        return null;

    }

    /*

    获取每一个月开始的时间和结束时间 endTime  结束的时间

     * @param startTime

     */

    public static List<Date> getTime() throws ParseException {

        List<Date> stringList=new ArrayList<>();

        Calendar calendar= Calendar.getInstance();

        SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd");

        String format = dateFormat.format(calendar.getTime());

        String minMonthDate = getMinMonthDate(format);

        //开始的时间

        String startTime = minMonthDate+" 00:00:00";

        SimpleDateFormat dateForm= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

        Date date = dateForm.parse(startTime);

        stringList.add(date);

        //结束的时间

        String maxMonthDate = getMaxMonthDate(format);

        String endTime = maxMonthDate+" 59:59:59";

        Date dat= dateForm.parse(endTime);

        stringList.add(dat);

        return stringList;

    }

    public static Date getSpecifiedTime(String dateTime)  {

        Date d = new Date();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        String dateNowStr = sdf.format(d);

        log.info(dateNowStr);

        String startTime = dateNowStr+" "+dateTime;

        log.info(dateTime);

        SimpleDateFormat dateForm= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

        Date date = null;

        try {

            date = dateForm.parse(startTime);

        } catch (ParseException e) {

            e.printStackTrace();

        }

        return date;

    }

    /**

     * 根据日期获取周几

     * @param dateAttendanceStatus

     * @return

     */

    public static String getWeekday(Date dateAttendanceStatus) {// 必须yyyy-MM-dd

        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");

        String date=  sd.format(dateAttendanceStatus);

        SimpleDateFormat sdw = new SimpleDateFormat("E");

        Date d = null;

        try {

            d = sd.parse(date);

        } catch (ParseException e) {

            e.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return sdw.format(d);

    }

    public static Date  getDate(Date date){

        SimpleDateFormat sd = new SimpleDateFormat("MM-dd");

        String date1=  sd.format(date);

        Date parse=null;

        try {

           parse = sd.parse(date1);

        } catch (ParseException e) {

            e.printStackTrace();

        }

        return parse;

    }

    /**

     * 获取时间的月份

     * @param

     */

    public static int queryMonthAcquisitionTime(Date date){

        Calendar ca = Calendar.getInstance();

        ca.setTime(date);

        int month = ca.get(Calendar.MONTH)+ 1;//第几个月

        return month;

    }

    /**

     * 获取当前日期的前3个月时间

     * @param

     * @return

     */

    public static Date queryGetFirstMonths(){

        Date dNow = new Date();

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(dNow);

        calendar.add(Calendar.MONTH, -2);//得到前3个月

        Date  formNowthreeMonth = calendar.getTime();

        return formNowthreeMonth;

    }

    public static void main(String[] args) throws ParseException {

//

    }

    public static long get_d_plaus_1(Calendar c) {

        //day_of_month

        c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1);

        return c.getTimeInMillis();

    }

    /**

     * 根据年和月获取这个月开始的时间

     * @param year

     * @param month

     * @return

     */

    public static Date getBeginTime(int year, int month) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        YearMonth yearMonth = YearMonth.of(year, month);

        LocalDate localDate = yearMonth.atDay(1);

        LocalDateTime startOfDay = localDate.atStartOfDay();

        ZonedDateTime zonedDateTime = startOfDay.atZone(ZoneId.of("Asia/Shanghai"));

        return Date.from(zonedDateTime.toInstant());

    }

    /**

     * 根据年和月获取这个月结束的时间

     * @param year

     * @param month

     * @return

     */

    public static Date getEndTime(int year, int month) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        YearMonth yearMonth = YearMonth.of(year, month);

        LocalDate endOfMonth = yearMonth.atEndOfMonth();

        LocalDateTime localDateTime = endOfMonth.atTime(23, 59, 59, 999);

        ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));

        return Date.from(zonedDateTime.toInstant());

    }

    /**

     * 根据月获取开始和结束的时间

     */

     public static List<String>  queryStartTimesMonth(int month){

         List<String> dateList=new ArrayList<>();

         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

         SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy");

         Date date = new Date();

         //获取当前年份

         String year=sdf1.format(date);

         log.info("当前的年份是========="+year);

         Date beginTime = getBeginTime(Integer.parseInt(year), month);

         System.out.println("开始的时间"+sdf.format(beginTime));

         dateList.add(sdf.format(beginTime));

         Date endTime = getEndTime(Integer.parseInt(year), month);

         System.out.println("结束的时间"+sdf.format(endTime));

         dateList.add(sdf.format(endTime));

         return dateList;

     }

    /**

     * 获取时间的日

     */

    public  static  int GetsDayTime(Date date){

        Calendar cal = Calendar.getInstance();

        cal.setTime(date);

        int day = cal.get(Calendar.DATE);

        return day;

    }

    /**

     * 将字符串转成data

     */

    public static Date convertStringData(String dataString){

        Date date=null;

        try {

           date = new SimpleDateFormat("yyyy-MM-dd").parse(dataString);

        } catch (ParseException e) {

            e.printStackTrace();

        }

        return date;

    }

}

时分秒的处理经常遇到

DateFormat simpleDateFormat = DateFormat.getTimeInstance();

 当前时间的时分秒

 String format = simpleDateFormat.format(new Date);

时分秒进行相减

public class TimeOperate {

 public static void main(String[] args) {

  Date date = new Date();

  Calendar calendar= Calendar.getInstance();

  SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd");

  String format = dateFormat.format(calendar.getTime());

  //开始的时间

  String startTime = format+" 00:00:00";

  System.out.println(startTime);

  //结束的时间

  String endTime = format+" 59:59:59";

  System.out.println(endTime);

  int sub = TimeOperate.sub("9:59:00","9:45:00");

System.out.println(sub);

 }

 /**

  * 两个时间的加法运算

  * 注意: 请传入 HH:mm:ss 格式的数据

  * @param time1 被加数

  * @param time2 加数

  * @return 返回加法运算后的结果

  */

 public static String add(String time1, String time2){

  String time = null;

  try {

   SimpleDateFormat sf = new SimpleDateFormat("HH:mm:ss"); //被加数  字符串格式化

   Date date1 = sf.parse(time1);

   Calendar calendar1 = Calendar.getInstance();

   calendar1.setTime(date1);

   Date date2 = sf.parse(time2); //加数 字符串格式化

   Calendar calendar2 = Calendar.getInstance();

   calendar2.setTime(date2);

   int hour = calendar2.get(Calendar.HOUR_OF_DAY); //获取加数 小时

   int min = calendar2.get(Calendar.MINUTE); //获取加数 分钟

   int second = calendar2.get(Calendar.SECOND); //获取加数秒

   //加法运算

   calendar1.add(Calendar.HOUR, hour); 

   calendar1.add(Calendar.MINUTE, min);

   calendar1.add(Calendar.SECOND, second);  

   time = sf.format(calendar1.getTime());

  } catch (Exception e) {

   // TODO: handle exception

   e.printStackTrace();

  }

  return time;

 }

 /**

  * 两个时间的减法运算 

  * 注意: 请传入 HH:mm:ss 格式的数据

  * @param time1 被减数

  * @param time2 减数

  * @return

  */

 public static  int sub(String time1, String time2){

  String time = null;

  double pp=0;

  int i=0;

  try {

   SimpleDateFormat sf = new SimpleDateFormat("HH:mm:ss"); //被加数  字符串格式化

   Date date1 = sf.parse(time1);

   Calendar calendar1 = Calendar.getInstance();

   calendar1.setTime(date1);

   Date date2 = sf.parse(time2); //加数 字符串格式化

   Calendar calendar2 = Calendar.getInstance();

   calendar2.setTime(date2);

   int hour = calendar2.get(Calendar.HOUR_OF_DAY); //获取加数 小时

   int min = calendar2.get(Calendar.MINUTE); //获取加数 分钟

   int second = calendar2.get(Calendar.SECOND); //获取加数秒

   //减法运算

   calendar1.add(Calendar.HOUR, -hour);

   calendar1.add(Calendar.MINUTE, -min);

   calendar1.add(Calendar.SECOND, -second);

   time = sf.format(calendar1.getTime());

   int index1=time.indexOf(":");

   int index2=time.indexOf(":",index1+1);

   int hh=Integer.parseInt(time.substring(0,index1));

   int mi=Integer.parseInt(time.substring(index1+1,index2));

   int ss=Integer.parseInt(time.substring(index2+1));

   System.out.println(hh*60*60+mi*60+ss);

   float h=(hh*60*60+mi*60+ss);

   float k=h/60/60;

   if (k>0&&k<0.5){

    k=1;

   }

   //进行四舍五入

   pp = Math.ceil((double) k);

   i=new Double(pp).intValue();

//   pp= Math.round((float)k);

  } catch (Exception e) {

   // TODO: handle exception

   e.printStackTrace();

  }

  return i;

 }

}

都是基础但是,开发需要就是基础,希望可以给你带来,新的感觉,看一遍明白,原来还可以这样,加油,也谢谢你的关注,高级的问题可以加我微信问我,基础也是非常重要,有时候会搞出笑话

舔狗故事

哎,一直努力赚钱,但是她给我当成舔狗

你不要找学习计算机的女孩子好不好,毕竟我就是一个外包,还4年才没有到30k,学计算机女孩子女孩子会看不起你的,会天天跟你吵架,跟你说,你技术菜,毕竟计算机这行工资高,说你为什么别人可以你还是外包的,这么菜,毕竟人家点点头,师兄就会爱上他,每一个学习代码女孩子都是为提高工资,都以为技术高有高工资,但是她们不知道不代表每一个人都可以进阿里巴巴

毕竟就是一个写jsp的女孩子会看不起你的,会天 天跟你吵架,跟你说,你技术菜,毕竟计算机这行工资高,说你为什么别人可以你还是写jsp的,哎

毕竟人家点点头,阿里巴巴的人和腾讯 小哥哥都会给她解决问题,而你狗屁不是 叫叫哥哥,同事就会给她解决问题,而你会被看不起,被骂,说这不是我的接口,跟我有什么关系

可能每一个男孩子跟女孩子表白,女孩子都会这样说,正常,因为她看不起你,你狗屁没有,但是,她还想要你当她舔狗就会这样说,她看不起你,只是以这种形式说出来而已

毕竟人家点点头都可以跟郑大结婚,

没有钱,就会跟上面表白一样,表面说你耽误她,现实看不起你

ctmd的狗女人,真98作,大半夜给我发消息说失恋了,我发了一堆安慰的话,屁都不放一个,搞得老子跟舔狗一样,我操你失恋了,你就找我,完美,过几天又和好了,你他妈啥意思

记住一定不能跟我学习,我是废物,哎,难,一辈子孤单

记住我,我是上海从此不做舔狗,我经历好多事情,遇到好多普信女,心中只有技术,谢谢你的关注

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月27日

PHP abspath函数代码示例

PHP abspath函数代码示例本文整理汇总了PHP中abspath函数的典型用法代码示例。如果您正苦于以下问题:PHP abspath函数的具体用法?PHP abspath怎么用?PHP abspath使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。在下文中一共展示了abspath函数的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您

PHP魔术常量__DIR__备忘

PHP魔术常量__DIR__备忘概述:本文简要讨论在TP5.0中定义目录常量时,用到的PHP魔术常量__DIR__的含义及其它相关的用法。截止到PHP7.4,通过官方手册查知,目前PHP一共有八个魔术常量,分别为:__LINE__,__FILE__,__DIR__,__FUNCTION__,__CLASS__,__TRAIT__,__METHOD__,__NAMESPACE__。__DIR__ 是

热门专题

易捷尔高职单招|易捷尔高职单招,易捷尔高职单招培训,单招分数线,单招录取分数线,高职单招学校分数线
易捷尔高职单招
云南开放大学|云南开放大学报名,云南开放大学报考,云南开放大学,什么是云南开放大学,云南开放大学学历,云南开放大学学费,云南开放大学报名条件,云南开放大学报名时间,云南开放大学学历,云南开放大学专业
云南开放大学
一年制中专|中专学历,中专是什么学历,中专是什么,中专有什么专业,中专升大专,一年制中专
一年制中专
云南巨榕教育投资集团有限公司|云南巨榕教育投资集团有限公司,巨榕教育集团,巨榕教育
云南巨榕教育投资集团有限公司
国家开放大学|国家开放大学报名,国家开放大学报考,国家开放大学,什么是国家开放大学,国家开放大学学历,国家开放大学学费,国家开放大学报名条件,国家开放大学报名时间,国家开放大学学历,国家开放大学专业
国家开放大学
云南高职单招|云南单招,云南单招网,云南高职单招网,云南高职单招,云南单招学校,云南单招培训
云南高职单招
外贸网站建设|外贸网站建设,英文网站制作,英文网站设计,美国主机空间,外贸建站平台,多语言网站制作
外贸网站建设
天麻的功效与作用吃法|天麻的功效与作用,天麻的功效与作用吃法,天麻炖什么治头痛最好,天麻的功效与作用禁忌,天麻多少钱一斤,天麻的功效与作用吃法及禁忌,天麻怎么吃效果最好,天麻粉的功效与作用,天麻怎么吃
天麻的功效与作用吃法

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部