图片 4

值类型和引用类型在内存上的存储区域

即读取引用类型对象的顺序:变量—>内存地址—>实例对象。

new:1、在内存中开辟一块空间
2、在开辟的空间创建对象
3、调用对象的构造函数

 

10.查看类图
右键类文件-视图-查看类图 可以看类之间的继承关系

图片 1

能把这个i累加到sb里面

图片 2

窗口-即时-及时窗口-&s1 &s2 可以看s1和s2的内存地址
上面是栈中的地址,下面是堆中的地址

引用类型的对象存储在堆中,并且会分配一个内存地址。该内存地址会存储到栈空间,栈空间名为变量名。

7.练习
char类型数组转为string类型

 

   一个叫S2,内存地址是2000XX


子类继承了父类,那么子类从父类那里继承过来了什么?
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。能看到也不能用
李一个有钱亲戚挂了,受益人是李,但是没有给他银行密码。他继承过来了却用不了。
问题:子类有没有继承父类的构造函数?
答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,
创建父类对象,让子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,
子类就调用不到了,所以子类会报错。

 1.值类型存储图解:

                    S2=“李四”


sb.Append(i);追加

 

当我们创建好对象后
给这个对象的属性赋值用set
打印这个属性的值的时候执行get

 

图片 3

 引用类型存储总结:

限定:set get 构造函数

 

string 为什么这么慢,因为它每次都要开空间
stringbuilder这么快是因为它在内存中开空间,用来用去都是同一块类型。
最后stringbuild还是得要tostring转为string 类型。

值类型和引用类型的区别:

创建 string s1=”张三”
        string s2=”张三”
只在堆中开辟一块空间 存储”张三”
在栈中开辟两块空间命名为s1和s2指向堆中的空间(存储堆中的地址)

 

1 string path = @"c:abcdefgff苍dsfgdd苍老师.wav"; @代表字符串中的都表示
2 int index = path.LastIndexOf("\");字符串中\代表一个
3 path=path.Substring(index+1); 截取是从开始,所以要加1
4 Console.WriteLine(path);
5 Console.ReadKey();

1 //Trim():去掉字符串中前后的空格
2 //TrimEnd():去掉字符串中结尾的空格
3 //TrimStart():去掉字符串中前面的空格
4 string str = " hahaha ";
5 str=str.Trim();
6 Console.Write(str);
7 Console.ReadKey();

 1 //string.IsNullOrEmpty():判断一个字符串是否为空或者为null
 2 string str = null;
 3 if(string.IsNullOrEmpty(str))
 4 {
 5 Console.WriteLine("是的");
 6 }
 7 else
 8 {
 9 Console.WriteLine("不是");
10 }
11 Console.ReadKey();

1 //string.Join():将数组按照指定的字符串连接,返回一个字符串。
2 string[] name = { "张三","李四","王五","赵六","田七" };
3 string str=string.Join("|", name); params可变参数:可以放数组也可以放参数
4 Console.WriteLine(str);
5 Console.ReadKey();

图片 4

练习

程序员开发经常涉及到的内存区域:堆、栈、静态存储区域。

Person zsPerson=new Person();
zsPerson.Name=”张三”;

本章节,暂时只介绍第1个区别:值类型和引用类型在内存上的存储区域。

第二种方法
查找多个字的话就不行

 2.引用类型-字符串存储图解:

5、字符串提供的各种方法
//把字符串转为大写
LessonOne =LessonOne.ToUpper();
//把字符串转为小写
LessonOne=LessonOne.ToLower();
//比较两个字符串的值
LessonOne.Equals(LessonTwo,StringComparison.OrdinalIgnoreCase)
Equals同样 StringComparison.OrdinalIgnoreCase
枚举.忽略被比较的字符串的大小写

常用引用类型:string、自定义类、数组

4、字符串
1)、字符串的不可变性
当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟一块空间存储新值。
当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁。

 

④如果你再  S1=”李四”

 

 1 string str = "daghdewejhadgwehhjfhajejwwe";
 2 int index = str.IndexOf('e');
 3 Console.WriteLine("第1次出现e的位置是{0}", index);
 4 int count = 1;
 5 while (index != -1)
 6 { 
 7 index = str.IndexOf('e', index + 1);
 8 count += 1;
 9 if (index == -1)
10 {
11 break;
12 }
13 Console.WriteLine("第{0}次出现e的位置是{1}", count, index);
14 }
15 Console.ReadKey();

3.引用类型-自定义类存储图解:

①当你创建了S1和S2后,就会在栈中开辟两个空间

  1. 值类型和引用类型在内存上存储的地方不一样。值类型的值是存储在内存的栈当中。引用类型的值是存储在内存的堆中。
  2. 在传递值类型和传递引用类型的时候,传递方式不一样。值类型我们称之为值传递,引用类型我们称之为引用传递。

//contains(包括),判断字符串中是否包含指定的字符串


   是存在堆中开辟的空间内


1 string str = "daghdewejhadgwehhjfhajejwwe";
2 for (int i = 0; i < str.Length; i++)
3 {
4 if(str[i]=='e')
5 {
6 Console.WriteLine(i);
7 }
8 }
9 Console.ReadKey();

常用值类型:int、double、bool、char、decimal、struct、enum

Stopwatch 计时器
Stopwatch sw=new Stopwatch();
sw.Start();开始计时
sw.Stop();停止计时
sw.elapsed 当前实例测量得出的总运行时间

练习

执行完父类无参构造函数,再去执行子类的
执行父类的构造函数,就相当于创建一个父类的对象
因为没有父类的对象,子类没办法用父类的属性
创建子类对象的时候,也顺便创建了他父类的对象,这样才能用到父类的属性和方法,成员
子类包含了自己的属性和父类对象(构造函数),内部的父类又包含了他的属性和方法

②你给S1,S2赋值的string 类型 “张三”

StringBuilder和String的区别
String在进行运算时(如赋值、拼接等)会产生一个新的实例,而StringBuilder则不会。
使用StringBuilder进行操作,最后再用ToString转为String类型即可。

int 重新赋值 会在原来的栈空间覆盖原值
string
重新赋值,会在原来的堆空间重新开辟一个空间存新值。栈中存地址的空间不变

子类成员名称和父类成员名称相同,会隐藏继承的父类成员,隐藏后果就是调不到了。
添加new后只是不报错

1 char[]chs={‘1’,‘2’,‘3’};
2 string str=new string(chs);
 1 StringBuilder sb = new StringBuilder();
 2 //string str = null;
 3 Stopwatch sw = new Stopwatch();
 4 sw.Start();
 5 for (int i = 0; i < 100000; i++)
 6 {
 7 //str += i;
 8 sb.Append(i);
 9 }
10 sw.Stop();
11 Console.WriteLine(sw.Elapsed);
12 Console.ReadKey();

3、值类型和引用类型
区别:
1、值类型和引用类型在内存上存储的地方不一样。
2、在传递值类型和传递引用类型的时候,传递的方式不一样。
值类型我们称之为值传递,引用类型我们称之为引用传递。
我们学的值类型和引用类型:
值类型:int、double、bool、char、decimal、struct、enum
引用类型:string、自定义类、数组
存储:
值类型的值是存储在内存的栈当中。
引用类型的值是存储在内存的堆中。

   它也有个内存地址是XX0001

string s = “a b c 3 12 – + _ , == fdf”;
//分割字符串Split
//把不想要的字符都写在char数组里
//数组虽然干掉了,但是还是留了一个空””
//后面加上,StringSplitOptions.RemoveEmptyEntries把空给干掉
char[] chs = { ‘ ‘,’_’,’=’,’+’,’,’,’-‘};
string[] str = s.Split(chs,StringSplitOptions.RemoveEmptyEntries);
Console.ReadKey();

发表评论

电子邮件地址不会被公开。 必填项已用*标注