• 沒有找到結果。

References (Section 5.2)

N/A
N/A
Protected

Academic year: 2022

Share "References (Section 5.2)"

Copied!
23
0
0

加載中.... (立即查看全文)

全文

(1)

References (Section 5.2)

Hsuan-Tien Lin

Deptartment of CSIE, NTU

OOP Class, March 15-16, 2010

(2)

Fun Time (1)

What happens in memory?

1 i n t i ;

2 s h o r t j ;

3 double k ;

4 char c = ’ a ’ ;

5 i = 3 ; j = 2 ;

6 k = i ∗ j ;

(3)

Life Cycle of a Primitive Variable (C/Java)

declared and created

1 i n t c oun t ;

used and modified

1 co unt += 1 ;

destroyed

–automatically (when out of scope)

(4)

Fun Time (2)

What happens in memory?

1 S t r i n g s = " l a l a l a " ;

2 S t r i n g t = " abc " ;

3 S t r i n g a = s + t ;

(5)

Fun Time (3)

What happens in memory?

1 Record r 1 ; / / r 1 . name , r 1 . sc or e

2 Record r 2 ;

3 r 1 = new Record ( ) ;

4 r 2 = r 1 ; / / how many r e c o r d s are t h e r e ?

5 r 1 . name = " HTLin " ;

6 r 2 . sc or e = 9 8 ;

(6)

Fun Time (4)

What happens in memory?

1 c l a s s Person { S t r i n g name ; Person spouse ; }

2

3 Person George ;

4 Person Marry ;

5 George = new Person ( ) ;

6 George . name = " George " ;

7 Marry = new Person ( ) ;

8 Marry . name = " Marry " ;

9 Mary . spouse = George ;

10 George . spouse = Marry ;

(7)

Fun Time (5)

What happens in memory?

1 c l a s s Person { S t r i n g name ; Person spouse ; }

2

3 Person George ;

4 George = new Person ( ) ;

5 George . name = " George " ;

6 George . spouse = new Person ( ) ;

7 George . spouse . name = " Marry " ;

8 George . spouse = new Person ( ) ;

9 George . spouse . name = " L i s a " ;

(8)

Life Cycle of an Object Instance (Java)

reference declared

1 Record r ;

instance created

1 r = new Record ( ) ;

used and modified

1 System . o u t . p r i n t l n ( r . name ) ;

destroyed

–automatically (when out of use)

(9)

Reference: Key Point

a instance occupies a space in the memory;

老太太住在屏東一個房子裡面

reference (a.k.a. safe pointer): the “address” to the instance;

用"海角七號"就可以找到老太太

class-type variable: holds the reference;

一個"信封",上面寫著海角七號

any operation on the instance goes thru the reference;

要請老太太"回憶"時,拿個信封上寫"海角七 號",接著寫"回憶",阿Ja就會使命必達了

老人 信封= new 老人(老太太的身家資料);

信封.回憶();

(10)

null Revisited (1/2)

1 c l a s s Record {

2 S t r i n g name ;

3 S t r i n g ID ;

4 i n t sc or e ;

5 }

6

7 p u b l i c c l a s s RecordDemo {

8 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] arg ) {

9 Record r 1 = new Record ( ) ;

10 System . o u t . p r i n t l n ( r 1 . sc or e ) ;

11 System . o u t . p r i n t l n ( r 1 . name ) ;

12 }

13 }

null: Java’s reserved word of saying “no reference”

default initial value for extended types (if initialized automatically)

0, NULL, anything equivalent to integer 0: C’s way of saying “no

reference”

(11)

null Revisited (2/2)

1 c l a s s Record {

2 S t r i n g name ;

3 S t r i n g ID ;

4 i n t sc or e ;

5 }

6

7 p u b l i c c l a s s RecordDemo {

8 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] arg ) {

9 Record r 1 = n u l l;

10 System . o u t . p r i n t l n ( r 1 . sc or e ) ;

11 System . o u t . p r i n t l n ( r 1 . name ) ;

12 }

13 }

null pointer exception (run time error): accessing the component

of “no reference”

(12)

null Revisited: Key Point

null: Java’s special way of saying “no reference”

(13)

Reference Equal (1/2)

1 c l a s s Record {

2 S t r i n g name ;

3 i n t sc or e ;

4 }

5

6 p u b l i c c l a s s RecordDemo {

7 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] arg ) {

8 Record r1 , r 2 ;

9 r 1 = new Record ( ) ; r 2 = new Record ( ) ;

10 r 1 . name = " HTLin " ; r 1 . s co re = 9 5 ;

11 r 2 . name = " HTLin " ; r 2 . s co re = 9 5 ;

12 System . o u t . p r i n t l n ( r 1 == r 2 ) ;

13 r 2 = r 1 ;

14 System . o u t . p r i n t l n ( r 1 == r 2 ) ;

15 }

16 }

reference equal: comparison by “reference value”

(14)

Reference Equal (2/2)

1 c l a s s Record {

2 S t r i n g name ;

3 i n t sc or e ;

4 }

5

6 p u b l i c c l a s s RecordDemo {

7 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] arg ) {

8 Record r1 , r 2 ;

9 r 1 = n u l l; r 2 = new Record ( ) ;

10 System . o u t . p r i n t l n ( r 1 == r 2 ) ;

11 r 2 = r 1 ;

12 System . o u t . p r i n t l n ( r 1 == r 2 ) ;

13 }

14 }

null does not equal non-null ... o_O

null equals null ... O_o

(15)

Reference Equal: Key Point

==: reference equal rather than content equal for ex-

tended types

(16)

String Equal (1/1)

1 p u b l i c c l a s s StringDemo {

2 s t a t i c S t r i n g s1 ;

3 s t a t i c S t r i n g s2 ;

4 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] arg ) {

5 s1 = " HTLin " ;

6 s2 = " HTLin " ;

7 System . o u t . p r i n t l n ( s1 == s2 ) ;

8 s1 = s1 + " l a l a l a " ;

9 s2 = s2 + " l a l a l a " ;

10 System . o u t . p r i n t l n ( s1 == s2 ) ;

11 System . o u t . p r i n t l n ( s1 . e q u a l s ( s2 ) ) ;

12 }

13 }

first true: compiler allocates one constant string only second false: two different string references

third true: an action (method) for content comparison

(17)

String Equal: Key Point

String ==: still reference equal, use .equals if want

content equal

(18)

Reference Argument/Parameter (1/3)

1 c l a s s Tool {

2 b o o l t r i c k y ( S t r i n g s1 , S t r i n g s2 ) {

3 s2 = s2 + " " ;

4 r e t u r n ( s1 == s2 ) ;

5 }

6 }

7 p u b l i c c l a s s Demo{

8 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] arg ) {

9 Tool t = new Tool ( ) ;

10 S t r i n g sa = " HTLin " ;

11 S t r i n g sb = sa ;

12 System . o u t . p r i n t l n ( t . t r i c k y ( sa , sb ) ) ;

13 System . o u t . p r i n t l n ( sa == sb ) ;

14 System . o u t . p r i n t l n ( t . t r i c k y ( sa + " " , sb ) ) ;

15 }

16 }

reference parameter passing: again, value copying sa, sb copied to s1, s2

s2 (reference) changed, sb didn’t

(19)

Reference Argument/Parameter (2/3)

1 c l a s s m yI nt {i n t v a l ; m yI nt (i n t v ) { v a l = v ; } }

2 c l a s s Tool {

3 v o i d swap ( m yI nt f i r s t , m yI nt second ) {

4 i n t tmp = f i r s t . v a l ;

5 f i r s t . v a l = second . v a l ;

6 second . v a l = tmp ;

7 System . o u t . p r i n t l n ( f i r s t . v a l ) ;

8 System . o u t . p r i n t l n ( second . v a l ) ;

9 }

10 }

11 p u b l i c c l a s s Demo{

12 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] arg ) {

13 Tool t = new Tool ( ) ;

14 m yI nt i = new m yI nt ( 3 ) ;

15 m yI nt j = new m yI nt ( 5 ) ;

16 t . swap ( i , j ) ;

17 System . o u t . p r i n t l n ( i . v a l ) ;

18 System . o u t . p r i n t l n ( j . v a l ) ;

19 }

20 }

swapped as requested

(20)

Reference Argument/Parameter (3/3)

1 c l a s s m yI nt {i n t v a l ; m yI nt (i n t v ) { v a l = v ; } }

2 c l a s s Tool {

3 v o i d swap ( m yI nt f i r s t , m yI nt second ) {

4 m yI nt tmp = f i r s t ;

5 f i r s t = second ;

6 second = tmp ;

7 System . o u t . p r i n t l n ( f i r s t . v a l ) ;

8 System . o u t . p r i n t l n ( second . v a l ) ;

9 }

10 }

11 p u b l i c c l a s s Demo{

12 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] arg ) {

13 Tool t = new Tool ( ) ;

14 m yI nt i = new m yI nt ( 3 ) ;

15 m yI nt j = new m yI nt ( 5 ) ;

16 t . swap ( i , j ) ;

17 System . o u t . p r i n t l n ( i . v a l ) ;

18 System . o u t . p r i n t l n ( j . v a l ) ;

19 }

20 }

what happens?

(21)

Reference Argument/Parameter: Key Point

argument ⇒ parameter: by reference copying

same for return value

(22)

this (1/1)

1 c l a s s Record {

2 i n t sc or e ;

3 v o i d s e t _ t o (i n t s co re ) { t h i s. sc or e = sc or e ; }

4 v o i d a d j u s t _ s c o r e { t h i s. s e t _ t o ( sc or e +10) ; }

5 }

which score? which set_to?

this: my (the object’s)

(23)

this: Key Point

this: the reference variable pointing to the object

itself

參考文獻

相關文件

INFORMAÇÃO GLOBAL SOBRE AS ASSOCIAÇÕES DE SOLIDARIEDADE SOCIAL E OS SERVIÇOS SUBSIDIADOS REGULARMENTE PELO INSTITUTO DE ACÇÃO SOCIAL. STATISTICS ON SOCIAL SOLIDARITY ASSOCIATIONS

Valor acrescentado bruto : Receitas mais variação de existências, menos compras de bens e serviços para revenda, menos comissões pagas, menos despesas de exploração. Excedente

Valor acrescentado bruto : Receitas do jogo e dos serviços relacionados menos compras de bens e serviços para venda, menos comissões pagas menos despesas de

Valor acrescentado bruto : Receitas do jogo e dos serviços relacionados menos compras de bens e serviços para venda, menos comissões pagas menos despesas de

(In Section 7.5 we will be able to use Newton's Law of Cooling to find an equation for T as a function of time.) By measuring the slope of the tangent, estimate the rate of change

we use data (random sample) to test if the data provides significant evidence to reject the null hypothesis.. If X > c reject

For R-K methods, the relationship between the number of (function) evaluations per step and the order of LTE is shown in the following

To improve the convergence of difference methods, one way is selected difference-equations in such that their local truncation errors are O(h p ) for as large a value of p as