1 简述++i和i++的区别?
我们把i当做苹果,把刀当做++,当程序执行到这儿的时候,++在前面,则i=i+1,然后程序拿新的i执行这儿。++在后面则是程序直接拿i,用,走过它之后,i=i+1.
好了我们开始吃苹果,刀在苹果前面,就是刀削了苹果,然后吃,苹果没皮了。到在后面就是直接吃。假设这个吃就是程序执行,也就是吃完之后再削。我这个吃比喻的事程序执行。,。 有点别扭。
2 short s=1;s=s+1;有什么错?short s=1;s+=1;有什么错?
第一个 如下,会提示incompatible types
public void test(){
short i = 1;
i = i+1;
// i = (short) (i+1);
// i+=1;
System.out.println(i);
}由于short数据类型和int数据类型表示范围不一样,所以需要进行类型转换,解决方案是:要么将short改为int,要么强制类型转换(short)s+1。
第二个对于 short s=1;s+=1;由于+=是Java的规定运算符,Java编译器会对它进行特殊处理,因此可以正确编译。
3 Integer和int的区别?
https://blog.csdn.net/login_sonata/article/details/71001851
integer是一个封装int类型的封装,默认值null,int为java中8中基本数据类型之一,默认值是0.
实际上判断这两个==的时候,主要就是判断东西被存在哪里了,存的地方不一样,不相等。
如果都是在缓存中,那么就是只有这一个,如果在堆中,两个integer可能不想等
integer的有一部分数是存在缓存中的。
那么看一下integer.valueof()的源码。
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html
找问题的本质。,。就是因为==比较的是两个数是不是同一个电视机。
Integer i5 = new Integer(127);
Integer i6 = new Integer(127); i5,i6两个指向的东西都在缓存中,是同一个电视机
Integer i7 = new Integer(128);Integer i8 = new Integer(128); i7 i8都在堆中,地址不同,是两个电视机,对这个==来说返回false
4.&和&&的区别?
& 不管前面的条件是否正确,后面都执行
&& 前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好
拓展 &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长
https://zhidao.baidu.com/question/326837810783238845.html
5. 使用最有效的方式计算出2乘以4等于几?使用位运算:2<<2
0000 0010, 0000 1000
为啥这就是最有效的方式 --》拓展https://zhidao.baidu.com/question/395841805.html
——》》问计算机,了解汇编,了解底层,这个问题估计 才好解释
汇编指令,内存,
6 String s=new String(“xyz”)创建了几个对象?
https://www.cnblogs.com/dangzhenjiuhao/p/4585389.html
首先在string池内找,找到?不创建string对象,否则创建, 这样就一个string对象
遇到new运算符号了,在内存上创建string对象,并将其返回给s,又一个对象
就这一段代码的话就是2个对象,堆上一个xyz,池中一个。
好的上面扯的都是对背后存储规则的理解,那么==和equal,equal比较两个我们看起来一样的字段,给的结果是相等的
String a = new String("abc");
String b = new String("abc");
System.out.println( a == b ); //false
System.out.println( a.equals(b) ); //true
System.out.println( a.hashCode() == b.hashCode() ); //true
a和b的内存地址肯定是不同的,但是其hashcode却一样
如何查看integer地址?
https://bbs.csdn.net/topics/360099779
java不能操作内存
只有hashcode和内存地址无关 / hashCode只是和地址有一定关系,但绝不等于地址!
Java直接内存读写 https://bijian1013.iteye.com/blog/2232847没看
https://blog.csdn.net/mxd446814583/article/details/79599752没看
7. 静态变量和实例变量的区别?
String static x = "aa"; String本来就是final的.
1 语法上 static; 2 记载顺序上,程序加载类的字节码,静态变量就可以分配空间从而被使用。而实例变量是实例对象的字节码被加载创建的时候,才会给实例变量分配内存空间。 3 数量上 一个类,或者说不断继承下来的,在起始类中若有个static变量,无论后面类new多少,static变量只有一个,而实例变量则是和对象有关的。
8 突然杂记。为什么老是出现在自己的类里面,new自己的这种操作呢
一个class,里面加一个main方法,在这个main里面new class,这个,emm就是好吧main是个入口。new出一个实例对象,进行接下来一系列主观的操作。new出实例对象是主观存在的,咱的class,类这种想法是客观存在的。 new
随便new呗,只要符合代码规则。
9.switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
https://blog.csdn.net/weixin_36279318/article/details/80555752
还没看完,歇一下。
继续 Sat May 11 22:49:16 CST 2019
基本类型中,byte,short,char都可以隐式的转换为int,因为int的杯子比他他们大,他们又都同属于整形。他们都可以,他们的包装类也都可以
switch(exp)中 exp 只能是一个整数表达式或者枚举常量
https://blog.csdn.net/u014683368/article/details/81146128
https://blog.csdn.net/u012110719/article/details/46316659 这里涉及到了枚举,我对枚举没太理解。
10.简述String、StringBuffer 和 StringBuilder 区别
他们都是final类,string是不能被继承的,且该类中的成员方法都被默认为了final.
对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象.
stringbuffer是线程安全的,stringbuilder则不是。
StringBuffer表示的内容可以修改。02.String实现了equals()方法,StringBuffer没有。
2.StringBuffer 和 StringBuilder 区别:01.StringBuffer是线程安全的可以在多线程中使用。 StringBuilder是线程不安全的,但是运行效率非常高!
http://www.cnblogs.com/dolphin0520/p/3778589.html这篇关于三者的介绍非常好 ,.,
https://blog.csdn.net/weixin_36279318/article/details/80555752转java基础问题1__2吧,这里我写的有点多了
关于
重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源 https://blog.csdn.net/javazejian/article/details/51348320
https://www.jianshu.com/p/75d9c2c3d0c1
https://www.cnblogs.com/shenliang123/archive/2012/04/16/2452206.html
https://blog.csdn.net/u013679744/article/details/57074669 这个号
https://blog.csdn.net/sixingmiyi39473/article/details/78306296 这个行
就是这个可以,。,,。,。 原因啊,就是hashcode在这里面减轻集合工作压力,快速得出结论,如果写了equal不重写hash,会导致集合中存在重复数据,写了hash而不写equal的话,那更扯淡了,同key,同hash值你都没办法更新值了。,。,看源码就懂了
对于“为什么重写equals()就一定要重写hashCode()方法?”这个问题应该是有个前提,就是你需要用到HashMap,HashSet等Java集合。用不到哈希表的话,其实仅仅重写equals()方法也可以吧。而工作中的场景是常常用到Java集合,所以Java官方建议 重写equals()就一定要重写hashCode()方法
---------------------
作者:Nostark
来源:CSDN
原文:https://blog.csdn.net/sixingmiyi39473/article/details/78306296
版权声明:本文为博主原创文章,转载请附上博文链接!