JAVA中数组问题

问题描述

我直接写内容;inta[]=newint[4];intb[]=newint[4];a.equals(b);false????第一个不懂为什么是FALSEinta[]=newint[]{1,2,3,4};intb[]=newint[]{1,2,3,4};a.equals(b);false????还是不懂为什么是FALSE帮帮的谢谢了

解决方案

解决方案二:
equal不是只在String中才用到的吗?
解决方案三:
equals比较的值,a和b又不是一个值怎么比较啊?当然是false
解决方案四:
new出来的东西都是堆里重新创建的,你觉得会是一个东西吗?
解决方案五:
inta[]=newint[4];intb[]=newint[4];初始化一个int数组将引用赋予a,ba.equal(b)实际上比较的a,b数组的引用,也就是比较它们在堆内存的位置inta[]=newint[]{1,2,3,4};intb[]=newint[]{1,2,3,4};道理也是一致的,只是初始化了数组里每个元素的值
解决方案六:
Object中equals方法publicbooleanequals(Objectobj){return(this==obj);}因为a!=b所以false
解决方案七:
引用5楼swandragon的回复:

Object中equals方法publicbooleanequals(Objectobj){return(this==obj);}因为a!=b所以false

正解
解决方案八:
a.equals(b);没有重写过equals()方法的时候,它的含义是比较两个变量是否指向同一个对象的。
解决方案九:
equals除了比较值,还要比较hashCode.
解决方案十:
equals只是比较字符串的值吧
解决方案十一:
又不是同一对象。。当然是false
解决方案十二:
第一个False,比较的也不是原始类型啊,数组是引用类型吧,所以用==比较后是false吧。第二个equals是对字符串的比较啊。
解决方案十三:
学习了
解决方案十四:
指向的内存对象都是不一样的,你new了,重新创建对象了,怎么可能一样!!
解决方案十五:
好像equals是比较字符串的吧
解决方案:
类创建的两个对象是不同的。建议楼主看一下equals()和equalsIgnoreCase()这两个方法的区别
解决方案:
比较了hasCode
解决方案:
在String类中重写了equals方法。而其他类并未对equals方法做任何处理。
解决方案:
第一次看到这么用equals的
解决方案:
inta[]=newint[4];intb[]=newint[4];//a.equals(b);false????第一个不懂为什么是FALSEinta1[]=newint[]{1,2,3,4};intb1[]=newint[]{1,2,3,4};//因为它们都是不同的对象,如果需要进行数组的比较需要用到Arrays.equals()方法System.out.println(Arrays.equals(a,b));System.out.println(Arrays.equals(a1,b1));

解决方案:
inta[]=newint[4];intb[]=newint[4];a.equals(b);false????第一个不懂为什么是FALSE//equals不适用于基本类型,即int,float之类的,你可以用Integer,String等创建对象。inta[]=newint[]{1,2,3,4};intb[]=newint[]{1,2,3,4};a.equals(b);false????还是不懂为什么是FALSE//同上
解决方案:
路过学习。
解决方案:
引用8楼ouyangxiaokang6的回复:

equals除了比较值,还要比较hashCode.

很好,我再加一点首先看hashcode是否相等,如果不相等就是false,否则再看是否是同一个内存对象(这里是没有重写的情况)
解决方案:
源代码中Object的equals方法并没有比较hashcode啊?为什么楼上这么多人说有呢?/***Indicateswhethersomeotherobjectis"equalto"thisone.*<p>*The<code>equals</code>methodimplementsanequivalencerelation*onnon-nullobjectreferences:*<ul>*<li>Itis<i>reflexive</i>:foranynon-nullreferencevalue*<code>x</code>,<code>x.equals(x)</code>shouldreturn*<code>true</code>.*<li>Itis<i>symmetric</i>:foranynon-nullreferencevalues*<code>x</code>and<code>y</code>,<code>x.equals(y)</code>*shouldreturn<code>true</code>ifandonlyif*<code>y.equals(x)</code>returns<code>true</code>.*<li>Itis<i>transitive</i>:foranynon-nullreferencevalues*<code>x</code>,<code>y</code>,and<code>z</code>,if*<code>x.equals(y)</code>returns<code>true</code>and*<code>y.equals(z)</code>returns<code>true</code>,then*<code>x.equals(z)</code>shouldreturn<code>true</code>.*<li>Itis<i>consistent</i>:foranynon-nullreferencevalues*<code>x</code>and<code>y</code>,multipleinvocationsof*<tt>x.equals(y)</tt>consistentlyreturn<code>true</code>*orconsistentlyreturn<code>false</code>,providedno*informationusedin<code>equals</code>comparisonsonthe*objectsismodified.*<li>Foranynon-nullreferencevalue<code>x</code>,*<code>x.equals(null)</code>shouldreturn<code>false</code>.*</ul>*<p>*The<tt>equals</tt>methodforclass<code>Object</code>implements*themostdiscriminatingpossibleequivalencerelationonobjects;*thatis,foranynon-nullreferencevalues<code>x</code>and*<code>y</code>,thismethodreturns<code>true</code>ifandonly*if<code>x</code>and<code>y</code>refertothesameobject*(<code>x==y</code>hasthevalue<code>true</code>).*<p>*Notethatitisgenerallynecessarytooverridethe<tt>hashCode</tt>*methodwheneverthismethodisoverridden,soastomaintainthe*generalcontractforthe<tt>hashCode</tt>method,whichstates*thatequalobjectsmusthaveequalhashcodes.**@paramobjthereferenceobjectwithwhichtocompare.*@return<code>true</code>ifthisobjectisthesameastheobj*argument;<code>false</code>otherwise.*@see#hashCode()*@seejava.util.Hashtable*/publicbooleanequals(Objectobj){return(this==obj);}

解决方案:
数组是引用数据类型,而引用数据类型每new一次就说明是不同对象,而equals比较的是对象的地址,不同对象在堆内存地址不一样,所以结果为false...除非重写equals方法。
解决方案:
1、数组是一个Object对象,所以直接使用数组的equals()方法,普遍符合是使用Object类的equals()方法。2、Object类的equals()方法,实质上还是使用==比较对象。3、JDK中很多类重写了equals()方法,包括java.lang.String类和java.util.Arrays类。4、所以,当你比较两个字符串的时候,它使用的是String类下的equals()方法,这个方法比较的是对象值。5、同样的道理,如果需要比较两个数组的值,就需要使用Arrays类中的equals()方法。6、代码示例:int[]a=newint[]{1,2,3};int[]b=newint[]{1,2,3};System.out.println(Arrays.equals(a,b));

结果返回true。
解决方案:
“普通符合”是“实际上”,打错了
解决方案:
equals在比较数量是比较内存里开辟的地址是不是一样。
解决方案:
你new的这两个数组是个什么对象就不清楚了,但肯定是没有覆盖Object的equals方法的,所以返回值是false,因为Object的equals方法始终返回false.可以看看Object的源代码。。
解决方案:
你调用的equals是基类Object中的,比较的是两个对象的引用,两个不同的对象引用当然不同所以两个比较结果都是false数组的equals不像字符串那样重写过基类的equals,你可以用Arrays.equals(a,b)比较数组的内容
解决方案:
总结大家的回帖:1.Object的equals比较的是对象在内存中的地址,效果同"=="2.String和Arrays类的equals是重写(overridden)过的,比较的是内容,而不是地址
解决方案:
第一个错误在于:inta[]=newint[4];是在内存中连续分配4个int(一个int在java占4个字节)的内存空间,a指该连续空间的首地址。两个地址怎能相等。第二个错误也一样。
解决方案:
所有Java的类的父类Object类里就有equals方法。string类只不过重写了父类里的equals方法。就是STRING类的equals方法比较的是内容,而其他的没有重写的就是比较的应用地址。你的a和b在内存中存放的地址不一样(不管值是否一样),当然就是FALSE了,
解决方案:
应为比较的是两个对象的分配空间而不是不比较空间里的直两个对象的空间不同所以是FALSE如果比较的是里面的值就是true
解决方案:
数组的equals方法比较的是传进方法体里的对象而不是对象的内容a【4】和b【4】虽然初始化后内容一样都为零但他们的地址不一样,也就是他们不是同一个对象所以是false。至于第二个false,你自己赋值和数组初始化赋值效果一样所以原理如上。足以这类比用到了equals或是contains等方法一般不重写方法的话比较的都是对象而不是对象的内容!!!
解决方案:
19楼和25楼说的对这是Object下的equals:booleanequals(Objectobj)指示其他某个对象是否与此对象“相等”。这是Arrays下的equals:staticbooleanequals(boolean[]a,boolean[]a2)如果两个指定的boolean型数组彼此相等,则返回true。staticbooleanequals(byte[]a,byte[]a2)如果两个指定的byte型数组彼此相等,则返回true。staticbooleanequals(char[]a,char[]a2)如果两个指定的char型数组彼此相等,则返回true。staticbooleanequals(double[]a,double[]a2)如果两个指定的double型数组彼此相等,则返回true。staticbooleanequals(float[]a,float[]a2)如果两个指定的float型数组彼此相等,则返回true。staticbooleanequals(int[]a,int[]a2)如果两个指定的int型数组彼此相等,则返回true。staticbooleanequals(long[]a,long[]a2)如果两个指定的long型数组彼此相等,则返回true。staticbooleanequals(Object[]a,Object[]a2)如果两个指定的Objects数组彼此相等,则返回true。staticbooleanequals(short[]a,short[]a2)如果两个指定的short型数组彼此相等,则返回true。是不一样的。
解决方案:
数组中存放的是内存地址吧,因为new了2次所以内存地址不同
解决方案:
inta[]=newint[4];intb[]=newint[4];//a.equals(b);false????第一个不懂为什么是FALSEinta1[]=newint[]{1,2,3,4};intb1[]=newint[]{1,2,3,4};//因为它们都是不同的对象,如果需要进行数组的比较需要用到Arrays.equals()方法System.out.println(Arrays.equals(a,b));System.out.println(Arrays.equals(a1,b1));这个事正确的,因为你用了2个new创建了2个数组a和b,a.equals(b)是指这2个数组的内存地址相同,有点像c中指向同一地址的指针,Arrays.equals(a,b)是指你创建的数组a和b数值是否相等,返回的是Boolean型变量
解决方案:
equals比较的是内存地址,==比较的是值
解决方案:
学习了
解决方案:
String的equals之所以比较的是内容而不是地址是因为重写了这个方法如果没有重写依然比较的是地址
解决方案:
学习了啊
解决方案:
我的理解这个问题很简单的就是比较hashcodepublicclassDemo1{publicstaticvoidmain(String[]args){inta[]=newint[]{1,2,3,4};intb[]=newint[]{1,2,3,4};System.out.println("a.hashCode()"+a.hashCode());System.out.println("b.hashCode()"+b.hashCode());}}

用这段代码自己测试一下就行了hashcode是不一样的!
解决方案:
数组的概念与equals没有什么关联想比较需要,根据自己的需要自己写就重写equals和hashCode方法
解决方案:
基础的东西,JAVA中数组不和字符串一样,它属于基础数据类型,根本就没有方法可以调用,要比较?用循环吧
解决方案:
我得到的value是‘Cannotcallanymethodonarrays.’
解决方案:
#44有道理啊
解决方案:
不懂在说什么.请问可以解释一下吗,这段解释和楼主的问题有联系吗?不好意思。学习中...引用42楼lulu0126的回复:

我的理解这个问题很简单的就是比较hashcodeJavacodepublicclassDemo1{publicstaticvoidmain(String[]args){inta[]=newint[]{1,2,3,4};intb[]=newint[]{1,2,3,4};System.out.println("a.hashCode()"+a.hashCode());System.out.println("b.hashCode()"+b.hashCode());}}用这段代码自己测试一下就行了hashcode是不一样的!

解决方案:
Arrays.equals(byte[]a,byteb);

解决方案:
Arrays.equals(byte[]a,byte[]b);

解决方案:
数组中有个属性,是length,用来求数组长度的,注意是没括号的,字符串的是length(),是方法,不要搞错了,数组不是对象,不可能有方法可以调用

时间: 2024-11-08 19:02:05

JAVA中数组问题的相关文章

java中数组的问题,int [3]表示有三个元素的类型是int的吗

问题描述 java中数组的问题,int [3]表示有三个元素的类型是int的吗 int [3]表示有三个元素的类型是int的吗 int [3] [ ] int [ ] [3] 有语法错误吗? int [3] [ ] ==int [ ] [3] 吗 解决方案 你刚学的java吧. int[3]没有这种写法 一般是int[] a =new int[3]代表的是一个数组. int [3] [ ]这种是二维数组.不写默认为0. int [3] [ ] ==int [ ] [3]哪有这种写法~ 解决方案二

Java中数组的创建与传参方法(学习小结)_java

(一)数组的创建 数组的创建包括两部分:数组的申明与分配内存空间. int score[]=null; //申明一维数组 score=new int[3]; //分配长度为3的空间 数组的申明还有另外一种方式: int[] score=null; //把中括号写在数组名前面 通常,在写代码时,为了方便,我们将两行合并为一行: int score[]=new int score[3]; //将数组申明与分配内存写在一行 (二)传递参数 由于初学java,这里只讨论值传递,不考虑地址传递.主要有3点

java中数组和图片的相互转换问题。

问题描述 java中数组和图片的相互转换问题. 由于需求,我把一个灰度图片转成了一个short类型的数组. File file = new File("grayImage.jpg"); BufferedImage src=ImageIO.read(file); int width=src.getWidth(null); int height=src.getHeight(null); int minX=src.getMinX(); int minY=src.getMinY(); shor

java中数组转集合问题.

问题描述 java中数组转集合问题. List test = java.util.Arrays.asList(new int[]{3, 5, 3, 4}); 为什么这个会报错,也会报错. List test = java.util.Arrays.asList(new Double[]{3, 5, 3, 4}); 这个却不会报错,而且能用增强for,为什么Integet却连转都转不了. 还有,基本数据类型数据能有办法转集合吗? 数组转集合后是不是不能添加元素. 解决方案 List test = j

java中数组越界是什么意思

问题描述 java中数组越界是什么意思 java中数组越界是什么意思 是不是数组的元素的类型发生不统一的情况 解决方案 越界就是超过了边界,数组脚标是从0开始的,你定义的数组长度为5,那么你的脚标就只能是0,1,2,3,4 .向上或向下超过了超过了都是越界 解决方案二: 数组越界就是提供的下标超出边界(out of bound),比如 int[] a = new int[10]; 那么 a[-1] 和 a[11]就是越界. 解决方案三: 比如你定义了一个长度为5的数组int[] a = new

转型-Java中数组的类型转换问题

问题描述 Java中数组的类型转换问题 向上转型自不用说,对向下转型原理也知道,主要看父类的引用:如果父类变量引用的是正确的子类类型(即父类对象引用的是子类型的内存空间,然后赋给子类对象),则赋值将执行:如果父类变量引用的不是相关的子类型,将产生ClassCastException异常. 通过下属代码测试,符合原理. Object[] o={"qw","we","rt"}; Object[] oo=new String[]{"qw&qu

java 中数组是值类型还是引用类型?

问题描述 java 中数组是值类型还是引用类型?Object o = new int[] {1,2,3};观点1:数组类型是一族类型,它们都继承自System.Array,而System.Array又继承自System.Object.所有的数组类型都是引用类型.观点2:看你的数组是用的类对象还是基本数据类型了如果是值类型的数组,比如int[],那里面存的就是值类型.引用类型,就存引用咯!观点3:除了基本数据类型,其他的都是引用数据类型或者其他说法! 解决方案 除了基本数据类型,其他的都是引用数据

Java中数组 问题。。。。。。。。。。。。。。。

问题描述 Java中数组 问题............... 结果是什么 解决方案 已知是什么?三个数组,一个二维数组 要求什么?没看懂.同一个字母在三个数组中都有可能出现,位置还可能不一样,所以结果不唯一啊. 解决方案二: 没看明白题目,是要把二维数组所有字母下标列出还是列出和一维数组对应的? 解决方案三: 先遍历二维数组,得到数组下标和对应的元素,然后根据元素找到其在一维数组的位置:最后按你最下面要求的打印出来就行了,很简单的equal就能搞定

java中数组的相关知识小结(推荐)_java

1.  2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages;     ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[]ags;    ags=new int{1,2,3,4};    或者   int[]ags=new int{1,2,3,4}; 3.java不支持不同类型的重名数组 4.java中数组的循环赋值 package dierge; public class Shuzu { public sta