算法篇---java经典问题!!!

问题一:==与equal的区别?

==和 equals 都是比较的,而前者是运算符,后者则是一个方法,基本数据类型和引用数据类型都可以使用运算符==,而只有引用类型数据才可以使用 equals,下面具体介绍一下两者的用法以及区别.
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如 Objet obj = new Object();变量 obj是一个内存, new Object()是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。equals 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
String a=new String("heima");
String b=new String("heima");
两条 new 语句创建了两个对象,然后用 a,b 这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即 a 和 b 中存储的数值是不相同的,所以,表达式 a==b 将返回 false,而这两个对象中的内容是相同的,所以,表达式 a.equals(b)将返回 true。

equals 本身是一个方法,它是根类 Object 里边的方法,所有类和接口都直接或者间接继承自 Object,所以在所有的类中都有 equals()方法,都是继承来的,

在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如, String input = …;input.equals(“quit” ),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都是使用 equals 方法。

如果一个类没有自己定义 equals 方法,那么它将继承 Object 类的 equals 方法,Object 类的 equals 方法的实现代码如下:

boolean equals(Object o){
return this==o;
}

这说明,如果一个类没有自己定义 equals 方法,它默认的 equals 方法(从 Object类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用 equals 和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回 false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals 方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。代码,试一下 equals 和==的区别

/*
* ==和 equals 的用法以及区别
* */
public class TestEqulas{
public static void main(String[] args) {
String s = new String("heima");
String s2 = new String("heima");
System.out.println(s.equals(s2));//输出 true,因为 String 类已经重写了 equals
System.out.println(s == s2);//输出 false,因为两者的地址是不同的
//创建三个动物对象
//a1 和 a2name 和 age 都相同
Animal a1 = new Animal("Tom",5);
Animal a2 = new Animal("Tom",5);
//先试一下用==比较链各个对象
System.out.println(a1 == a2);
//输出 false,两个对象内容相同,但是他们的引用首地址不同
// 首先将自己写的 equals 方法注释掉,看输出结果是什么
boolean b = a1.equals(a2);
System.out.println(b);//结果为 false,证明是调用的继承来的那个 equals 方法
// 然后我们调用自己已经重写的 equals,再看下结果
b = a1.equals(a2);//现在调用的是已经重写后的方法
System.out.println(b);//所以打印的是 true

}}

 

public class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}// 重写了 equals 方法public boolean equals(Object o) {// 判断两个对象是否为同一个对象,如果是就直接返回 trueif (this == o) {return true;}// 再判断另一个对象 o 是否是 null,如果是 null 就没有必要再比了,肯定不相等,直接返回if (o == null) {return false;}if (o instanceof Animal) {// 如果是当前类的实例,那么就强制转换成当前类的实例,再依次比较成员变量是否相等Animal s = (Animal) o;// 注意: String 类型的成员变量也可以看做是一个 String 对象,需要用 equals 比较,而不能用==比较if (this.getName().equals(s.name) && this.age == s.age) {return true;}}return false;}
}

 

问题二:质数问题

package com.oumyye.质数;import java.util.Random;public class Snippet {public static void main(String[] args){Random rd = new Random(); //定义一个随机变量int i = rd.nextInt(1000); //获取个随机数System.out.println(isNum(i)); //输出结果
     }public static String isNum(int i ){String ret =i+"是质数"; //默认是质数if(i==2)return ret; //如果是 2 返回默认结果for (int j = 2; j < i/2; j++) { //制订循环次数if(i%j==0){ret=i+"不是质数"; // 如果能够整除返回不是质数break;}}return ret; //返回结果
     }
}

 

问题三:求解5阶螺旋矩阵问题

1   2   3   4  5

16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

 

public class LXJZQJ {public static void main(String[] args) {int n = 5;// 0:向右,1:向下,2:向左,3:向上int direction = 0;// 行,列int row = 0, col = 0;int num = 0;int[] array = new int[n * n];while (array[row * n + col] == 0) {num++;array[row * n + col] = num;switch (direction) {case 0:col++;break;case 1:row++;break;case 2:col--;break;case 3:row--;break;}if (row == n || col == n || row == -1 || col == -1|| array[row * n + col] != 0) {direction++;if (direction == 4)direction = 0;switch (direction) {case 0:row++;col++;break;case 1:row++;col--;break;case 2:row--;col--;break;case 3:row--;col++;break;}}}for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {System.out.printf("%-3s", array[i * n + j]);}System.out.println();}}
}

 

转载于:https://www.cnblogs.com/oumyye/p/4280454.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...

1、多对多添加方法 Override public void add(Role model, String functionIds) {// 1.先将角色保存到数据库roleDao.save(model);// 2.为角色添加权限&#xff08;一定要坚持映射文件中是否inverse&#xff09;if (StringUtils.isNotBlank(functionIds)){String[] functionIdL…

一幅长文细学JavaScript(七)——Ajax

文章目录7 Ajax7.1 概述7.1.1 基本概念7.1.2 网络通信开发者工具7.1.3 网页请求数据的方式7.1.4 资源的请求方式7.2 JQuery中的Ajax7.2.1 基本知识7.2.2 了解jQuery的Ajax7.2.3 $.get()7.2.4 $.post()7.2.5 $.ajax()7.3 接口7.3.1 接口概念7.3.2 接口测试工具7.4 form表单7.4.1…

创建PCH文件

build settings --> language --> prefix header 文件路径&#xff1a;$(SRCROOT)/ZhuiKe/PrefixHeader.pch解释&#xff1a;文件名/pch文件名转载于:https://www.cnblogs.com/xiangli/p/4288789.html

jquery获取select选择的文本与值

jquery获取select选择的文本与值 获取select &#xff1a; 获取select 选中的 text : $("#ddlregtype").find("option:selected").text(); 获取select选中的 value: $("#ddlregtype ").val(); 获取select选中的索引: $("#ddlregtype "…

Linux系统检查查看桌面环境

Linux的桌面系统系统多达十几种&#xff0c;像gnome、kde、mate、cinnamon、lxde、xfce、jwm等。比较常用的一般是gnome、kde、xfce等。那么如何判断Linux系统安装了哪种桌面环境组件呢&#xff1f;下面总结了一些检查桌面环境的方法&#xff1a; 方法1&#xff1a;env | grep…

uinavigation样式

1 UINavigationController* pNav [[UINavigationController alloc] initWithRootViewController:pView]; 2 [pNav.navigationBar setBarTintColor:NAVBAR_COLOR];//导航条背景颜色 3 [pNav.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:…

一幅长文细学JavaScript(二)——ECMAScript

2 基本程序设计结构 摘要 ​ 对于学习JS的程序员来说&#xff0c;一定是具备了一定的编程功底的&#xff0c;故在下面的概述中&#xff0c;我们不再提及一些简单的概念。 声明&#xff1a;在使用本文的代码时&#xff0c;为了避免文章冗长&#xff0c;我只附上了script标签内的…

HashMap源码剖析

无论是在平时的练习还是项目当中&#xff0c;HashMap用的是非常的广&#xff0c;真可谓无处不在。平时用的时候只知道HashMap是用来存储键值对的&#xff0c;却不知道它的底层是如何实现的。 一、HashMap概述 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作…

Android成长日记-Android监听事件的方法

1. Button鼠标点击的监听事件 --setOnClickListener 2. CheckBox, ToggleButton , RadioGroup的改变事件 --setOnCheckedChangeListener Eg: 3. onPageChangeListener() ----用来监控ViewPager滑到第几页转载于:https://www.cnblogs.com/boy1025/p/4301956.html

XSS攻击(出现的原因、预防措施......)

验证XSS攻击重点不是去查找可输入哪些内容会出现什么样的bug就是测试XSS攻击&#xff0c;重点是了解它出现的原理&#xff0c;为什么会出现XSS攻击&#xff0c;导致一些问题出现&#xff1f;如何防御与解决XSS攻击&#xff1f;以下我将简单介绍以上提出的问题。 如何判定没有被…

一幅长文细学JavaScript(三)——DOM

文章目录3 JavaScript DOM3.1 DOM基本术语DOM模型及其作用文档对象模型节点节点的属性文档对象3.2 DOM文档操作3.2.1 查找网页元素3.2.2 获取元素内容新的策略——修改样式更好的策略——修改样式3.2.3 改变元素内容3.2.4 操作网页元素3.2.5 获取元素偏移offset和style的区别3.…

2016国内移动广告平台排行榜

为什么80%的码农都做不了架构师&#xff1f;>>> 移动营销的发展可追溯至第一台便携式手机的诞生&#xff0c;并随着移动终端的更新迭代和广告技术的发展创新&#xff1b;随着移动互联网的技术与商业模式的迅速发展&#xff0c;移动营销领域面临着种种创新与改革&am…

Planning Strategy 和Requirement type的思考

Planning Strategy 和 requirement type的联系 1. 当需要对一个material进行计划的时候 &#xff0c;我们会自然的考虑到plant的 production方式 ( MTO production or MTS production) ,如果能确定下来是MTO 还是MTS 的方式 &#xff0c; 那就可以确定了计划策略的选择 。 而计…

【摄影】田子坊

图片发自简书App图片发自简书App图片发自简书App图片发自简书App图片发自简书App图片发自简书App图片发自简书App图片发自简书App转载于:https://www.cnblogs.com/wangting888/p/9701627.html

一幅长文细学JavaScript(四)——BOM

文章目录4 JavaScript BOM4.1 BOM概述浏览器对象模型4.2 Window对象4.2.1 弹出框弹出框类型4.2.2 定时事件定时器概念操作定时器4.2.3 同步与异步单线程JS同步和异步开启多线程一个问题同步任务和异步任务JS执行机制4.3 Location对象4.3.1 基本概念Location对象URLURL格式组成4…

selenium RC 环境配置

在网上搜索了许久&#xff0c;没找到有具体的配置&#xff0c;只是简单了写了几个步骤&#xff0c;自己琢磨了一下&#xff0c;于是&#xff0c;就想整理一篇文章&#xff0c;便于以后温习。 本文是参照官网的步骤进行了&#xff0c;当然了&#xff0c;也不完成相同。在这里我要…

西安房产

http://xa.58.com/ershoufang/16421056735238x.shtml?PGTID14251184213960.09692851384170353&ClickID7 http://xa.58.com/ershoufang/20901882448136x.shtml?PGTID14251184213960.09692851384170353&ClickID13 转载于:https://www.cnblogs.com/learningJAVA/p/43060…

一幅长文细学GaussDB(二)——数据库基础知识

文章目录2 数据库基础知识2.1 数据库管理简介数据库管理数据库管理工作范围对象管理制定数据库对象命名规范备份和恢复灾难恢复备份方式数据库安装数据库卸载数据库迁移数据库扩容例行维护工作2.2 数据库重要概念数据库和数据库实例数据库连接和会话数据库连接池模式表空间表数…

hive如何处理not in和in的问题

2019独角兽企业重金招聘Python工程师标准>>> 首先我们先创建两个表和测试数据。建表语句如下&#xff1a; create table table1(uid STRING, dayTimes BIGINT) PARTITIONED BY (dt STRING); create table table2(uid STRING, monTimes BIGINT) PARTITIONED BY (dt S…

HDU 2072(单词数)题解

以防万一&#xff0c;题目原文和链接均附在文末。那么先是题目分析&#xff1a; 【一句话题意】 “就是统计一篇文章里不同单词的总数”&#xff08;已经是一句话了。。&#xff09; 【题目分析】 明显需要去重&#xff0c;上set&#xff0c;因为按行分析&#xff0c;又没有EOL…