equals相关知识
-
scala equals == != eq nescala equals == != eq ne 测试case class User(name: String, age:Int) val u1 = User("zhang", 18) val u2 = User("zhang", 18) val u3 = User("zhang", 19) // equals: 用来测试值是否相等 println("===== test equals ======") println(u1 equals u1) println(u1 equals u2) println(u2 equals u1) println(u1 equals u3) // 特殊情况 // null是无意义的,不存在值,因此运行时空指针异常 // println(null equals null) // ==: 在Any中定义为final,代表equals。所以==的行为 与 equals的完全一样,都是用来测试值是否相等 println("===== test == ======") p
-
java中的equals与== equals()与==都是java中用于进行比较的,返回boolean值,不同的是equals()是Object类中定义的一个方法,==是一个比较运算符。下面是equals()在Object中的源码: public boolean equals(Object obj) { return (this == obj); }我们惊奇的发现这方法和==不是一模一样吗??下面再来看看String类中equals()方法的源码:public boolean equals(Object anObject) { &n
-
java当中的equals我们写的equals是每个类都会有的一种方法吧,用来判等的。在java中基本数据类型用==号来判等,引用数据类型的话,我们用equals来判等。Test s1 = new Test(5,6);Test s2 = new Test(5,6);System.out.println(s1.equals(s2));返回的结果为false因为我们看api的原码就是比较的是两个地址是否相等,但他们的地址不同。String s1=new String();String类型的equals方法就不一样,我们看原码啊,这就是我们人性化设定重写equals方法的原因。
-
java 学习日志——equals的应用,以及==与equals的对比equals 在eclipse中的使用。语法Dog dog1=new Dog(); Dog dog2=new Dog();dog1.equals(dog2);//比较dog1和dog2. 其中dog1和dog2都是对象的引用。要判断两个对象是否相等(相同)首先在子类中重写equals。方法如下:source——Generate hashcode()and equals()在没有重写时equals比较的是 对象的引用是否指向同一地址。一般情况下。两者必不相等。在的 Dog 类下重写equals后获得如下代码,代码意思看注释。public boolean equals(Object obj) { if (this == obj) //判断两个引用的地址是否相同 return true; if (obj == null)&
equals相关课程
equals相关教程
- 4.1 默认分配 - 池化 & 非池化 实例:ByteBufAllocator byteBufAllocator = ByteBufAllocator.DEFAULT;源码:public interface ByteBufAllocator { ByteBufAllocator DEFAULT = ByteBufUtil.DEFAULT_ALLOCATOR;}源码:以下源码是经过处理,只保留核心部分。public final class ByteBufUtil { static final ByteBufAllocator DEFAULT_ALLOCATOR; static { //1.分配类型 String allocType = SystemPropertyUtil.get("io.netty.allocator.type", PlatformDependent.isAndroid() ? "unpooled" : "pooled"); //2.根据类型,创建不同的分配器 Object alloc; if ("unpooled".equals(allocType)) { alloc = UnpooledByteBufAllocator.DEFAULT; } else if ("pooled".equals(allocType)) { alloc = PooledByteBufAllocator.DEFAULT; } else { alloc = PooledByteBufAllocator.DEFAULT; } DEFAULT_ALLOCATOR = (ByteBufAllocator)alloc; }}根据以上的源码,我们可以知道,使用 ByteBufAlloctor 来创建 ByteBuf 时,会判断使用池化还是非池化的分配器。
- 7. 字符串比较 String类提供了boolean equals(Object object)方法来比较字符串内容是否相同,返回一个布尔类型的结果。需要特别注意的是,在比较字符串内容是否相同时,必须使用equals()方法而不能使用==运算符。我们来看一个示例:628运行结果:使用equals()方法比较str1和str2的结果为:true使用==运算符比较str1和str2的结果为:true使用equals()方法比较str1和str3的结果为:true使用==运算符比较str1和str3的结果为:false代码中三个字符串str1,str2和str3的内容都是hello,因此使用equals()方法对它们进行比较,其结果总是为true。注意观察执行结果,其中使用==运算符比较str1和str2的结果为true,但使用==运算符比较的str1和str3的结果为false。这是因为==运算符比较的是两个变量的地址而不是内容。要探究其原因,就要理解上述创建字符串的代码在计算机内存中是如何执行的。下面我们通过图解的形式来描述这三个变量是如何在内存中创建的。当执行String str1 = "hello;"语句时,会在内存的栈空间中创建一个str1,在常量池中创建一个"hello",并将str1指向hello。当执行String str2 = "hello";语句时,栈空间中会创建一个str2,由于其内容与str1相同,会指向常量池中的同一个对象。所以str1与str2指向的地址是相同的,这就是==运算符比较str1和str2的结果为true的原因。当执行String str3 = new String("hello");语句时,使用了new关键字创建字符串对象,由于对象的实例化操作是在内存的堆空间进行的,此时会在栈空间创建一个str3,在堆空间实例化一个内容为hello的字符串对象,并将str3地址指向堆空间中的hello,这就是==运算符比较str1和str3的结果为false的原因。
- 1. 音乐推荐器1.0版本 如果之前没有学习过设计模式,很可能你的实现会是这样。编写 RecommendMusicService 类,里面有一个 Recommend方法。根据输入的风格不同,执行不同的推荐逻辑。代码如下:public class RecommendMusicService { public List<String> recommend(String style) { List<String> recommendMusicList = new ArrayList<>(); if ("metal".equals(style)) { recommendMusicList.add("Don't cry"); } else if ("country".equals(style)) { recommendMusicList.add("Hotel california"); } else if ("grunge".equals(style)) { recommendMusicList.add("About a girl"); }else { recommendMusicList.add("My heart will go on"); } return recommendMusicList; }}是不是觉得 recommed 方法太长了? OK,我们重构下,把每种音乐风格的推荐逻辑封装到相应的方法中。这样推荐方法就可以复用了。public class RecommendMusicService { public List<String> recommend(String style) { List<String> recommendMusicList = new ArrayList<>(); if ("metal".equals(style)) { recommendMetal(recommendMusicList); } else if ("country".equals(style)) { recommendCountry(recommendMusicList); } else if ("grunge".equals(style)) { recommendGrunge(recommendMusicList); }else { recommendPop(recommendMusicList); } return recommendMusicList; } private void recommendPop(List<String> recommendMusicList) { recommendMusicList.add("My heart will go on"); recommendMusicList.add("Beat it"); } private void recommendGrunge(List<String> recommendMusicList) { recommendMusicList.add("About a girl"); recommendMusicList.add("Smells like teen spirit"); } private void recommendCountry(List<String> recommendMusicList) { recommendMusicList.add("Hotel california"); recommendMusicList.add("Take Me Home Country Roads"); } private void recommendMetal(List<String> recommendMusicList) { recommendMusicList.add("Don't cry"); recommendMusicList.add("Fade to black"); }}这样是不是很完美了!recommend 方法精简了很多,而且每种不同的推荐逻辑都被封装到相应的方法中了。那么,如果再加一种风格推荐怎么办?这有什么难,recommed 方法中加分支就好啦。然后在 RecommendMusicService 中增加一个对应的推荐方法。等等,是不是哪里不太对?回想一下设计模式6大原则的开闭原则----对扩展开放,对修改关闭。面对新风格推荐的需求,我们一直都在修改 RecommendMusicService 这个类。以后每次有新风格推荐要添加,都会导致修改 RecommendMusicService 。显然这是个坏味道。那么如何做到实现新的风格推荐需求时,满足开闭原则呢?
- 3.1 修改控制器方法 修改登录方法,当用户输入的用户名和密码正确时,通过 Session 记录登录人信息。然后开发获取登录人员信息方法,返回 Session 中记录的登录人信息。实例:/** * 登录控制器 */@RestControllerpublic class LoginController { /** * 登录方法 */ @RequestMapping("/login") public boolean login(HttpServletRequest request, String username, String password) { if ("imooc".equals(username) && "123".equals(password)) { // 登录成功,则添加Session并存储登录用户名 request.getSession().setAttribute("LOGIN_NAME", username); return true; } return false; } /** * 获取登录人员信息 */ @RequestMapping("/info") public String info(HttpServletRequest request) { return "您就是传说中的:" + request.getSession().getAttribute("LOGIN_NAME"); }}
- 3. 策略模式与工厂模式结合使用 针对第一个缺点。我们可以通过策略模式与工厂模式结合使用来改进。通过进一步封装,消除客户端代码的条件选择。我们修改一下StrategyContext类,代码如下:public class StrategyContext { private TravelStrategy strategy; public StrategyContext(String travelWay) { if ("selfDriving".equals(travelWay)) { strategy = new SelfDrivingStrategy(); } if ("bicycle".equals(travelWay)) { strategy = new BicycleStrategy(); } else { strategy = new PublicTransportStrategy(); } } public int calculateMinCost(){ return strategy.calculateMinCost(); }}可以看到我们初始化的逻辑和工厂的逻辑很相似。这样条件判断就提炼到 Context 类中了。而客户端代码将会简洁很多,只需要在初始化 StrategyContext 时,传入相应的出行方式即可。代码如下:public class TravelService { private StrategyContext strategyContext; public int calculateMinCost(String travelWay){ strategyContext = new StrategyContext(travelWay); return strategyContext.calculateMinCost(); }}改进后,客户端代码现在已经完全不知道策略对象的存在了。条件判断也被消除了。其实很多时候我们都是通过搭配不同设计模式来达到我们的设计目标的。策略+工厂模式类图如下:
- 2.1 Model 这个字面意思很明显,咱就是一个模型组件。Model 是一个接口类型,Model 接口中提供了标准的保存数据的方法。Model addAttribute(String attributeName, @Nullable Object attributeValue);Model 使用起来很简单,将 Model 设为控制器方法的参数便可 ,其它的交给 Spring MVC,因为 Model 是一个接口类型,Spring MVC 会为我们辨明身份,注入一个具体的实例对象。@RequestMapping(value="/login",method=RequestMethod.POST)public String login01(User user,Model map) { if("mk".equals(user.getUserName()) && "123".equals(user.getUserPassword())) { map.addAttribute("loginUser", user); return "index"; } return "fail";}Model 接口中还有其它的方法,但都不常用,感兴趣的话大家可以查阅其源代码或 API 文档。
equals相关搜索
-
e preventdefault
e4a
each
each的用法
easter
easter day
easyui
easyui 官网
echarts
eclipse
eclipse 64位下载
eclipse android
eclipse tomcat
eclipse 教程
eclipse 快捷键
eclipseadt
eclipse安装教程
eclipse插件
eclipse插件下载
eclipse教程