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 方法的实现代码如下:

booleanequals(Object o){return this==o;

}

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

/** ==和 equals 的用法以及区别

**/

public classTestEqulas{public static voidmain(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 classAnimal {privateString name;private intage;publicAnimal(){}public Animal(String name,intage){this.name =name;this.age =age;}public voidsetName(String name){this.name =name;

}publicString getName(){returnname;

}public void setAge(intage){this.age =age;

}public intgetAge(){returnage;

}//重写了 equals 方法

public booleanequals(Object o){//判断两个对象是否为同一个对象,如果是就直接返回 true

if (this ==o) {return true;

}//再判断另一个对象 o 是否是 null,如果是 null 就没有必要再比了,肯定不相等,直接返回

if (o == null) {return false;

}return false;

}

}

问题二:质数问题

packagecom.oumyye.质数;importjava.util.Random;public classSnippet {public static voidmain(String[] args){

Random rd= new Random(); //定义一个随机变量

int i = rd.nextInt(1000); //获取个随机数

System.out.println(isNum(i)); //输出结果

}public static String isNum(inti ){

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 classLXJZQJ {public static voidmain(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();

}

}

}

java有关问题,java经典有关问题!相关推荐

  1. java参数传递(超经典)

    java参数传递(超经典) 2010-10-28 16:46:29|  分类: Java |  标签:sb  changedata  strbuf  参数传递  hello   |字号 订阅 Java ...

  2. java面试题jvm_经典面试题|讲一讲JVM的组成

    经典面试题|讲一讲JVM的组成 发布时间:2019-04-10 09:01, 浏览次数:1456 , 标签: JVM JVM(Java 虚拟机)算是面试必问的问题的了,而但凡问 JVM 一定会问的第一 ...

  3. java基础:Java七大外企经典面试精讲视频

    java基础:Java七大外企经典面试精讲视频 对于很多应聘java程序员的求职者来说,全面掌握java面试技巧,确实是自己找到一个好工作的敲门砖.今天小编在这里给大家分享一个关于java基础的Jav ...

  4. JAVA sku商品数据经典试题

    JAVA sku商品数据经典试题 试题1 试题2 试题3 试题代码 试题所有相关代码github: 试题1 假设sku数据很多, 无法将sku列表完全加载到内存中,从/resources/data/d ...

  5. 名师讲坛——Java Web开发实战经典基础篇(JSP、Servlet、Struts、Ajax)

    [书名]<名师讲坛--Java Web开发实战经典基础篇(JSP.Servlet.Struts.Ajax)> [作者]李兴华.王月清 [ISBN]9787302231585 ­}:YKf: ...

  6. 名师讲坛—Java Web开发实战经典基础篇(JSP、Servlet、Struts、Ajax)

    名师讲坛-Java Web开发实战经典基础篇(JSP.Servlet.Struts.Ajax) 基本信息 作者: 李兴华    王月清   出版社:清华大学出版社 ISBN:9787302231585 ...

  7. Java软件工程师必读经典书籍

    读书是另一种感知世界的方式,是另一种提升自我的方式,是另一种与人交谈的方式,一周不读书就觉得自己俗了,长久不看书,写东西就找不到感觉了,网络上,电视上,各种电子设备上的内容当然不少,但都比不上读书,读 ...

  8. 玩java游戏买什么手机好用又便宜_每一款JAVA游戏都是经典,但只有四款游戏,是90%玩家从小玩到大...

    2000年彩屏手机开始流行,诺基亚作为当年世界第一的手机厂商,更是研发出了多款造型酷炫的手机,例如翻盖.推盖以及后来的触屏机,都曾被我们使用过.我还记得当年小的时候,拿着爸爸的手机在上面搜索和下载各种 ...

  9. java初学者必看经典

    配置java环境变量: JAVA_HOME:配置JDK的目录 CLASSPATH:指定到哪里去找运行时需要用到的类代码(字节码) PATH:指定可执行程序的位置 LINUX系统(在" .ba ...

  10. java main函数_Java经典面试题集锦

    主题1:关于Java main方法的核心面试问题 1.如果main方法被声明为私有,会发生什么? 2.如果不提供String数组作为main方法的参数,会发生什么? 3.我们可以重载main()方法吗 ...

最新文章

  1. VS2010下编译OpenCV2.4.6静态库
  2. 【面试 struts2】【第三篇】struts2的问题
  3. 密码太多记不住?SSO帮你轻松访问VDI及外部资源
  4. mysql 不停机_mysql之 mysql 5.6不停机主从搭建(一主一从基于日志点复制)
  5. 【Boost】boost库asio详解1——io_service::run函数无任务时退出的问题
  6. 665. 非递减数列 golang 切片越界问题的探讨(二)
  7. 一款纯css3实现的超炫动画背画特效
  8. 八大排序算法:插入(2:插入、希尔)、选择(2:选择、堆)、交换(2:冒泡、快速)、归并、基数
  9. Python 刷题常用语法与数据结构汇总-2022.01.30
  10. 首席赚钱省钱专家小程序1.5.8+前端
  11. shell查询年月日(可以作为crontab判断年月日)
  12. 湖北文理学院数学与计算机科学学院,数学与计算机科学学院计算机协会十一月总结会议...
  13. 20190820 On Java8 第十章 接口
  14. hashmap扩容机制 jdk1.7
  15. GAT1400---视图库标准
  16. 微信小程序点餐系统的开发与实现
  17. vue项目生成二维码功能使用QRCode(接入微信和支付宝支付接口)
  18. linux上打开tif格式图片,tif图片格式介绍及其打开方式
  19. 贵州大学计算机学院研究生成绩查询,贵州大学计算机科学与技术学院2008年硕士研究生初试、复试总成绩一览表...
  20. Android自定义View--Flyme6的Viewpager指示器

热门文章

  1. 一步步手动实现热修复(一)-dex文件的生成与加载
  2. 消息中间件那些事--RabbitMQ
  3. 【42.59%】【codeforces 602A】Two Bases
  4. MATLAB中的微积分运算(数值符号)
  5. 01-object类,常用API
  6. C++学习——const
  7. 云计算与分布式系统课程学习笔记(一)——云计算简介
  8. Leetcode--152. 乘积最大子序列
  9. python 格式化工具_小而美的 Python 格式化工具--black
  10. 复杂指令集linux,精简指令集和复杂指令集区别