c# 中几个关于string问题
1、string是一个应用类型,而不是值类型;为什么用起来很像值类型?因为微软对其做了特殊处理。
2、
1 using System; 2 3 namespace testForString 4 { 5 class Program 6 { 7 class Abc 8 { 9 public string A { get; set; } 10 11 public DateTime D { get; set; } 12 } 13 14 static void Main(string[] args) 15 { 16 Abc abc = new Abc(); 17 18 19 string str = null + "acb"; 20 21 Console.ReadKey(); 22 } 23 } 24 }
以上代码中abc变量中abc.A为null,abc.D不是空而是1年1月1日0点0分0秒000。
string str = null + "acb";
代码并没有抛出异常。而是str被赋值为“abc”
3、如果是这样的一句话,
string str;
string abc=str+null;
运行时,会编译不通过.
4、运行以下代码:
1 string str=null; 2 3 string abc=str+null; 4 5 Console.WriteLine(abc.toString());
不会抛出任何一个异常,在第二行中abc已经被赋值为“”。
5.运行以下一段代码:
1 using System; 2 3 namespace testForString 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 string str = null; 10 11 Console.WriteLine(str.ToString()); 12 13 Console.ReadKey(); 14 } 15 } 16 }
将会抛出错误:System.NullReferenceException。
能完全答对的举手!!!
java中会是什么样子呢?
1 String str=null; 2 String str1=str+null; 3 4 System.out.println(str1+"abc"); 5 6 System.out.println(str1.toString()); 7 System.out.println(str.toString());
第4行打印出:nullnullabc
第6行打印出:nullnull
第7行抛出空指针错误:
Exception in thread "main" java.lang.NullPointerException
at cn.test.timer.TestTimer.main(TestTimer.java:xx)
基础才是编程人员应该深入研究的问题,比如:
1)List/Set/Map内部组成原理|区别
2)mysql索引存储结构&如何调优/b-tree特点、计算复杂度及影响复杂度的因素。。。
3)JVM运行组成与原理及调优
4)Java类加载器运行原理
5)Java中GC过程原理|使用的回收算法原理
6)Redis中hash一致性实现及与hash其他区别
7)Java多线程、线程池开发、管理Lock与Synchroined区别
8)Spring IOC/AOP 原理;加载过程的。。。
【+加关注】。