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的主要内容,如果未能解决你的问题,请参考以下文章