zoukankan      html  css  js  c++  java
  • 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

    还没看完,歇一下。 

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

  • 相关阅读:
    安装IDM扩展
    Go_数组&切片
    Mycat概念&安装
    IDEA自定义主题
    完全卸载Oracle11g
    创建型模式——单例模式(Singleton)
    设计模式统计
    PHP解压带密码的zip文件
    Win推荐软件
    如何设置线程池的线程数?
  • 原文地址:https://www.cnblogs.com/woainixxx/p/10847097.html
Copyright © 2011-2022 走看看