IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Jav基础不好搞出笑话的问题 -> 正文阅读

[Java知识库]Jav基础不好搞出笑话的问题

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也是可以使用这个的
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 12:43:31  更:2021-10-04 12:45:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:38:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码