java基础细节
java基础有很多的细节,如果不清楚其底层是如何运行的,很多我们一贯以来的想法都会致使我们做出错误的判断,话不多说,一起来颠覆三观吧。 1. 猜猜他们分别会输出啥? System.out.println(1+2+"a"); 因为执行的时候是从左到右的,遇到字符串就会强转为字符串。 所以第一行执行的是:String str=String.valueOf(1+2);? ? ? String sb=new StringBuffer(str).append("a").toString(); 第二行执行的是: String sb=new StringBuffer("a").append("1").append("2").toString(); 2. 那如果将上述题目改一下呢? System.out.println(1+2+‘a‘); 我们都知道,数据类型由低到高为char/short/byte< int < long < float < double,同时char类型向上转型会转化为相应的ASCII码,‘a‘的ASCII码为97,故1+2+97输出100 3. 下面的语句有问题吗? byte b1=1; 故正确的写法为 byte b3=(byte)(b1+b2) 4. 你觉得输出结果会是什么? Integer i=128; Integer存在缓存机制,会自动将-128~127的integer对象缓存在Cache数组中,一旦调用Integer.valueOf(i)方法,且-128<=i<=127,则会自动到数组中拿出来,否则就会创建新的Integer对象 5. 他们相等吗? String a="a"; 那这样呢? String a="a"; 首先String类型是不可变类型,那么第四行的执行如下: a+b:? ? new StringBuffer("a").append("b").toString();即在堆中新创建了一个对象,两者不再是同一个对象 但是编译器做了一些优化,在编译时期,String c="a"+"b"的编译结果是String c="ab". 6. 他们能交换吗? public class Test{ java的参数传递根据参数类型分为值传递和引用传递。 基本数据类型及其包装类就是值传递,所以在change()方法中,a相当于一个局部变量,change()执行完毕即被销毁,原变量a并没有任何影响。 public class Test{ 上述代码传递的是引用对象,所以是引用传递。即主函数的ab和change()方法中的ab共享同一个地址,因此在change()中交换数据会影响主函数中ab的参数。 7. 猜猜他们输出的结果分别是什么? public class Test{ public class Test{ 得出这个答案无可厚非,关键是如果我们改一下呢? private static void change(StringBuffer a,StringBuffer b) { 这里就很有问题了,明明a=b,为什么还是输出11 2 原因在于:进行引用传递时,对原对象的引用是不会改变的。 我们再修改一下: private static void change(StringBuffer a,StringBuffer b) { 这样我们就可以总结一下了:实际上,java的参数传递只有值传递!但是便于理解,我们根据参数类型的不同分为值传递和引用传递,其中对于基本数据类型和不可变对象(包装类和String类)采取的是值传递,对于其他的引用类采取的是引用传递,引用传递可以在方法中修改原对象的内容,但是对原对象的引用始终不会改变!————————————————版权声明:本文为CSDN博主「成长er」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_37820491/article/details/101049471 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 为什么getCanonicalPath会抛出已检查的异常,而getA
- java spark list 转为 RDD 转为 dataset 写入表中
- java – 更改使用JAXWS生成的默认XML命名空间前缀
- java – 在一个简单的聚合风暴拓扑中进行分组
- java – 如何使spring @retryable可配置?
- java – 为什么“mvn assembly:single”只用程序集创建一个
- java – wait()期间的非易失性变量值和两个线程中的notifya
- java android new String
- java – 如何配置spring来执行重叠的fixedRate任务?
- java – JRE支持的所有系统属性列表