java基础问题1

Posted woainixxx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础问题1相关的知识,希望对你有一定的参考价值。

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

还没看完,歇一下。

 

以上是关于java基础问题1的主要内容,如果未能解决你的问题,请参考以下文章

java基础问题 (转)

Java基础—异常

浅析关于java的一些基础问题(上篇)

java基础 一 基础语法

java语言基础1问题汇总

01.Java基础问题