日本免费Av网站_ ┬必丢疋搭┭-永川高速路口
淘宝减肥药排行榜十强
只推淘宝安全有效的减肥药

当前位置:日本免费Av网站 > 减肥产品

日本免费Av网站

时间:2021-05-11 13:07  编辑:wendj

String比较

publicstaticvoidmain(String[]args){

Strings1="abc";

Strings2="abc";

Strings3=newString("abc");

System.out.println(s1==s2);

System.out.println(s2==s3);

}

s1==s2true

s2==s3false

小伙伴们看了是不是很熟悉?可能有的人一眼就扫出了答案true,false。当然没有扫出正确答案的小伙伴们也不要气馁,下面跟大家分析分析为毛是这么一个答案。

按照==的语法来看,首先s1、s2、s3是三个不同的对象,常理来说,输出都会是false。然而程序的运行结果确实true、false。第二个输出false可以理解,第一个输出true就又让人费解了。

我们知道一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,而堆内存中则存放new出来的对象和数组。然而除此之外还有一块区域叫做常量池。

像我们通常想Strings1="abc";这样申明的字符串对象,其值就是存储在常量池中。当我们创建Strings1="abc"这样一个对象之后,"abc"就存储到了常量池(也可叫做字符串池)中。

当我们创建引用Strings2="abc"的时候,Java底层会优先在常量池中查找是否存在"abc",如果存在则让s2指向这个值,不会重新创建,如果常量池中没有则创建并添加的池中。这就是为什么答案是true和false的原因。

integer比较

Integera=128,b=128;

Integerc=127,d=127;

如果你的回答是false,false,可能你有一定的基础,知道Integer是一个封装类。当然如果你的答案是true,true的话,也在一定的认知范围之内,但是基础知识掌握的不够好。

好了,我们运行main方法,正确答案应该是false,true。前几年这道题出现在很多面试题中,当然你也会说了,我会做项目就ok了,用到查就是了,何必要知道,这我没话说。

其实当我们给一个Integer对象赋一个int值的时候,会调用Integer类的静态方法valueOf,

如果整型字面量的值介于-128到127之间,就不会new一个新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的运行结果是a==b=false,而c==d=true。

Integer与int比较

publicstaticvoidmain(String[]args){

Integera=newInteger(128);

intb=128;

Integerc=newInteger(6);

Integerd=newInteger(6);

}

相信又有不少小伙伴懵比了吧,ture还是false?还是直接公布答案吧,true,false。

c==d=false,我觉得没什么好说的,可能有的小伙伴要问了不是-128-127被缓存起来了么?但是我们这里的Integer是new出来的,并不是用的缓存,所以结果是false。

a==b=true,大家注意一下这里的b是int类型,当int和Integer做==比较的时候,Integer类型会自动拆箱,也就是把Integer转成int类型,所以这里进行比较的是int类型的值,所以结果即为true。

堆,栈,常量池的比较

栈与堆都是Java用来在Ram(内存)中存放数据(包括基本类型数据和包装类数据)的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

1.栈stack:存放基本类型的变量数据和对象的引用;

存取速度比堆要快,但是存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

如inta=3;这里的a是一个指向int类型的引用;

存在栈中的数据可以共享

2.堆heap:存放所有new出来的对象和数组

堆的优势是可以动态地分配内存大小,Java的垃圾收集器会自动收走这些不再使用的数据,缺点是,由于要在运行时动态分配内存,存取速度较慢。

(在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。)

3.常量池(字符串缓冲池):存放字符串常量对象

题1:Strings=newString(“china”)创建了几个StringObject

答案:2个

解析:

对于通过new产生一个字符串(假设为”china”)时,会先去常量池中查找是否已经有了”china”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”china”对象的拷贝对象。

题2:成员变量和局部变量的储存

成员变量:方法外部,类的内部定义的变量;

存储在堆中的对象里面,由垃圾回收器(GC)负责回收

局部变量:方法或语句块内部定义的变量。

局部变量必须初始化。 

形式参数是局部变量

局部变量的数据存在于栈内存中。

栈内存中的局部变量随着方法的消失而消失。

题3:Stringstr="abc";与Stringstr=newString("abc")的区别

Stringstr="abc":一定程度上提高程序的运行速度。

JVM首先检查常量池中是否存在“abc”,如果存在则直接将"abc"赋给str,如果不存在则会先在常量池中新建一个字符串"abc",然后再将其赋给str。这个时候,只是在栈中创建了一个指向String类的”abc”对象的引用变量str。对象不一定被创建!

因此,JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。

Stringstr=newString("abc"):new的话一概在堆中创建新对象,加重程序的负担。

题4:==与equals的区别

1.==:比较两个变量的值是否相等(即变量所指向的对象是否是一个对象),多用于基本类型的数据的比较

2.equals:比较两个独立对象的内容是否相等(前提是两个对象的类型要相同)。

问题一:JVM创建了两个引用str1和str2,但只创建了一个对象,而且两个引用都指向了这个对象。Stringstr1="abc"; Stringstr2="abc"; System.out.println(str1==str2);//true 

问题二:赋值的变化导致了类对象引用的变化,str1指向了另外一个新对象!而str2仍旧指向原来的对象。当我们将str1的值改为"bcd"时,JVM发现在栈中没有存放该值的地址,便开辟了这个地址,并创建了一个新的对象,其字符串的值指向这个地址。 

Stringstr1="abc"; Stringstr2="abc"; str1="bcd"; System.out.println(str1==str2);//false 

问题三:用new的方式是生成不同的对象。每一次生成一个。因此两个不同的对象Stringstr1=newString("abc"); Stringstr2=newString("abc"); System.out.println(str1==str2);//false 

问题四:java重载了“+”,查看java字节码可以发现“+”其实是调用了StringBuilder所以使用了“+”其实是生成了一个新的对象。所以(s3==s4)打印falseStrings1="ja"; Strings2="va"; Strings3="java"; Strings4=s1+s2; 

Strings5="ja"+"va"; System.out.println(s3==s4);//false 

System.out.println(s3==s5);//true System.out.println(s3.equals(s4));//true 

问题五:str3这个对象的引用直接指向str1所指向的对象(注意,str3并没有创建新对象)。

Stringstr1="abc"; Stringstr2="abc"; str1="bcd"; Stringstr3=str1;Stringstr4="bcd"; System.out.println(str1==str4);//true 

equals()与hashCode()方法的关系

设计HashCode(哈希编码,散列码)是为了提高性能.

equals()与hashCode()方法之间的关系可以概括为:

1如果两个对象相等(equal),那么必定拥有相同的哈希码(hashcode)

2即使两个对象有相同的哈希值(hashcode),但他们不一定相等.

。

猜你喜欢

最安全有效的减肥药

最安全有效的减肥药

编辑:小徐

现在的减肥药真的是真假难分,在选择减肥药的同时也应该更加小心,减肥药多种多样,那么如何才能选择最安全有效的减肥药,也成了很多小仙女的内心疑问,下面就跟着日本免费Av网站小编一起看一下,如何选择最安全有效的减肥药。 最安全有效的减肥药选购方法 1、首先需要观察产品的外包装,在包装中可以看到其配方是不是含有激素,含有激素的减肥药对身体的内..

吃减肥药失眠

吃减肥药失眠

编辑:小徐

随着现在流行以瘦为美,很多人会不顾身体的健康选择减肥药,达到快速减肥瘦身的效果,但是很多减肥药都是有副作用的,副作用比较轻的就是失眠现象,那么吃减肥药出现失眠是怎么回事儿?如果出现失眠后,我们应该怎样缓解? 吃减肥药失眠是怎么回事 减肥药中富含安非他命,所以减肥药服用了太多会有失眠现象,服用减肥药期间,身体会逐渐出现抗药性,身..

最新文章