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
版权声明:本文为博主原创文章,转载请附上博文链接!