问题一:==与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

算法篇---java经典问题!!!相关推荐

  1. java实现apriori算法_七大经典、常用排序算法的原理、Java 实现以及算法分析

    0. 前言 大家好,我是多选参数的程序员,一个正再 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己再这块确实很弱,需要大补(残废了一般) ...

  2. 经典排序算法(Java版)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 经典排序 ...

  3. java客服系统_阿里Java内部资料:2020最全Java技术栈(架构篇+算法篇+大数据)

    我只截图不说话,PPT大全,氛围研发篇.算法篇.大数据.Java后端架构!除了大家熟悉的交易.支付场景外,支撑起阿里双十一交易1682亿元的"超级工程"其实包括以下但不限于客服.搜 ...

  4. JAVA经典算法50题(转)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1]   题目:古典问题:有一对兔子, ...

  5. java经典算法四十题

    java经典算法四十题 [程序9]题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程找出1000以内的所有完数. public class W ...

  6. java经典50题_JAVA经典算法50题(3)【面试+工作】

    原标题:JAVA经典算法50题(3)[面试+工作] JAVA经典算法50题(3)[面试+工作] [程序21] 题目:求1+2!+3!+...+20!的和. 1.程序分析:此程序只是把累加变成了累乘. ...

  7. java 3 9 2 6数字排序_GitHub - JourWon/sort-algorithm: 史上最全经典排序算法总结(Java实现)...

    史上最全经典排序算法总结(Java实现) 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗, ...

  8. java经典100例算法题_10道java经典算法题,每一题都能帮你提升java水平!

    JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子 ...

  9. java求最大公约数_10道java经典算法题,小白必备,每一题都能提升你的java能力...

    JAVA经典算法 跪求关注,祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早上贵子,从不掉发! 更多java资料可以私信我领取! [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每 ...

最新文章

  1. 敏捷开发:如何通过回顾保持学习状态
  2. 小功率荧光灯拆解分析
  3. 网页加载报错——URL网页连接错误
  4. python怎么写文件-python头文件怎么写
  5. UA MATH564 概率论 Dirichlet分布
  6. CSP认证201312-5 I’m stuck![C++题解]:dfs、两次dfs
  7. linux fork, system, exec()
  8. html试题及答案,HTML试题及答案
  9. 计算机应用基础2010版知识点,2010计算机应用基础选择题(含答案版)重点.doc
  10. 突破传统生物3D打印技术局限-王秀杰/Charlie C.L. Wang/刘永进团队合作开发新型生物3D打印体系...
  11. 要用计算机才能算的题,计算机基础题精选,要考90分以上的同学进考场前必看 -电脑资料...
  12. C#写的ftp上传类
  13. Ubuntu 20.10 wine、微信、QQ安装教程
  14. JMP软件在六西格玛项目管理中高阶应用(五)
  15. 结构建模设计——Solidworks软件之特征成型中拉伸凸台基体与设计树应用实战总结
  16. 北京将广纳贤才 建设国际人才社区
  17. 普适计算机技术特征的事例,普适计算、物联网、云计算与未来社会信息化需求分析...
  18. Building Coder(Revit 二次开发) - 空闲事件(Idling Event)增强和外部事件(External Event)
  19. Nvidia Deepstream极致细节:3. Deepstream Python RTSP视频输出显示
  20. java xtend_简化Java语法 Eclipse推出Xtend

热门文章

  1. html回复评论_3天内看了3000多篇《哈佛商业评论》,挑出来最有用的分享下
  2. 努比亚z17s刷原生安卓_电脑运行手机APP,不会没关系,我推荐你使用显卡服务器运行安卓模拟器...
  3. r语言 adf检验_r语言中如何进行两组独立样本秩和检验
  4. 8086变址和指针寄存器
  5. Linux网络故障排查命令(ifconfig、ping、telnet、netstat、lsof、nc、curl、tcpdump)
  6. php globals_PHP $ GLOBALS(超级全局变量),带有示例
  7. ++i与i++的根本性区别(两个代码对比搞定)
  8. C——用冒泡排序法、选择排序法对随机输入的10个整数从小到大排序
  9. 循环链表(代码、分析、汇编)
  10. 利用kali的msf提取汇编机器码(shellcode)